Optimizing a server for low memory use
Below are a few tips on how to optimize a server to conserve as much memory as possible.
[edit]System-wide resources
- Run services under inetd/xinetd - Services such as SSH, SMTP servers, FTP servers, and almost any other service can be spawned by inetd/xinetd. In this case they only use memory when they are actually being used.
- Use ash or dash instead of bash. Be cautious! These alternative shells can break some scripts. Test all your scripts with the new shell before starting using it instead of bash.
[edit]MySQL
- Tune MySQL to use less memory for cache. The best is to use the my-small.cnf sample config as /etc/my.cnf. Below is an example of what to put in /etc/my.cnf.
[mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking set-variable = key_buffer=16K set-variable = max_allowed_packet=1M set-variable = thread_stack=64K set-variable = table_cache=4 set-variable = sort_buffer=64K set-variable = net_buffer_length=2K
- MySQL uses 10MBs of RAM for InnoDB tables. Remove support for InnoDB tables if you do not use them. To remove support for InnoDB, put the following lines in /etc/my.cnf
[mysqld] skip-innodb
[edit]Apache/PHP
- Tune Apache to only have a small number of spare children running. An example of the Apache configuration section:
StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 64 MaxClients 64 MaxRequestsPerChild 4000
Also, only load the modules you require. If you do do not use PHP, mod_perl, etc then do not install them.
- Install a PHP Cache such as Alternative PHP Cache. The PHP cache will store compiled PHP scripts so that they can be reused without the overhead of compiling and processing them for each request.