Mi e’ capitato recentemente di dover far convivere un server web Apache e un database server Mysql su una macchina virtuale con a disposizione pochissima ram (64MB). Ovviamente tentando di far partire anche solo uno dei due applicativi con le configurazion di default non c’era verso di riuscire a tenerlo in piedi per piu’ di una manciata di secondi, quindi c’e’ bisogno di settarli in modo da fargli consumare meno memoria (ram) possibile.
Limitare l’utilizzo di memoria su Apache (1.3.x, 2.x)
Prima di tutto se utilizzate Apache2 verificate di utilizzare il modulo mpm-prefork invece di mpm-worker, in un sistema Debian based basta installare il seguente pacchetto:
aptitude install apache2-mpm-prefork
Questo modulo rende apache2 simile alla vecchia versione 1.3, che consuma meno memoria ed e’ molto piu’ stabile.
Nella configurazione dovrete cambiare alcune righe perche’ rispecchino queste configurazioni:
In apache2 le trovate in /etc/apache2/apache2.conf
In apache1.3 le trovate in /etc/apache/httpd.conf
KeepAliveTimeout 3
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 5000
Limitare l’utilizzo di memoria su Mysql (4.x, 5.x)
Per entrambe le versioni di mysql bisogna modificare il file /etc/mysql/my.cf (in alcune ditribuzioni potrebbe essere in /etc/my.cnf)
Mysql 5:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-lockingbind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 16k
max_allowed_packet = 1M
thread_stack = 64K
thread_cache_size = 4
table_cache = 4query_cache_limit = 512K
query_cache_size = 1Mlog_bin = /var/log/mysql/mysql-bin.log
# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!
expire_logs_days = 10
max_binlog_size = 100M# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
skip-bdb# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
skip-innodb[mysqldump]
quick
quote-names
max_allowed_packet = 16M[mysql]
#no-auto-rehash # faster start of mysql but no tab completition[isamchk]
key_buffer = 16k#
# * IMPORTANT: Additional settings that can override those from this file!
#
!includedir /etc/mysql/conf.d/
Mysql 4:
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
# For low memory, Berkeley DB should not be used so keep skip-innodb uncommented unless required
skip-bdb
# For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required
skip-innodb[mysqldump]
quick
max_allowed_packet = 16M[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates[isamchk]
key_buffer = 8M
sort_buffer_size = 8M[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M[mysqlhotcopy]
interactive-timeout
Terminate queste modifiche potrete provare a lanciare i due servezi, in teoria dovrebbero partire senza grossi problemi, ma e’ ovvio che le configurazioni apportate non permetteranno al server di gestire grandi quantita’ di traffico ne di risorse, quindi e’ buona cosa testare l’andamento dando sempre un’occhio ai log, /var/log/apache/error.log e /var/log/syslog.
Queste configurazioni vanno particolarmente bene se avete acquistato dei Linux VPS (Virtual Private Server) con molta poca ram, soluzioni per esempio come VPSLink (1 -2 -3) e Linode 256.
Oltre a queste soluzioni vi consiglio anche di utilizzare Phrel, opportunatamente configurato, per limitare l’utilizzo delle risorse da parte di IP unici che effettuano piu’ connessioni contemporanee.