Ich versuche den Speicherverbrauch eines sehr kleinen Webservers (wenig Traffic, max. 20 Webseiten) in den Griff zu bekommen. Vorschläge für Werte fand ich bei http://wiki.vpslink.com/Low_memory_MySQL_/_Apache_configurations
Default:
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
Vorschlag bei knappen Ressourcen bei http://wiki.vpslink.com/Low_memory_MySQL_/_Apache_configurations
StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 50 MaxClients 50 MaxRequestsPerChild 5000
Meine /etc/apache2/apache2.conf:
LockFile ${APACHE_LOCK_DIR}/accept.lock PidFile ${APACHE_PID_FILE} Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 2 MaxSpareServers 5 MaxClients 50 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy all </Files> DefaultType None HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn Include mods-enabled/*.load Include mods-enabled/*.conf Include httpd.conf Include ports.conf LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent Include conf.d/ Include sites-enabled/
Meine Überlegung bei 20 MySQL-DB, vorwiegend werden davon 7 DB verwendet und die eher auch nicht gleichzeitig
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 2 MaxSpareServers 5 MaxClients 50 MaxRequestsPerChild 0 </IfModule>
Nun verstehe ich die Auswirkungen dieser Apache-Variablen nicht. Was bedeutet StartServer? Soviele DB wie gleichzeitig in Verwendung sein können?
Worum geht es bei SpareServers? Ich übersetze das mit Reserve-Server. Würde das bei meiner Konfiguration bedeuten, es können max. 10 Datenbanken gleichzeitig verwendet werden und der Speicher wird auf jeden Fall für 7 Server (StartServers + MinSpareServers) verbraucht?
Worum geht es bei MaxClients? Anzahl der Webseitenbesucher _pro_ DB oder für _alle_ DB? MaxRequestsPerChild 0 dürfte unbegrenzt bedeuten, wenn ich es richtig verstanden habe
Ist bei den Modulen was überflüssig. Es geht vorwiegend um Drupal und die Menalto-Gallery.
Default-Module + rewrite:
ls -1 /etc/apache2/mods-enabled/ alias.conf alias.load auth_basic.load authn_file.load authz_default.load authz_groupfile.load authz_host.load authz_user.load autoindex.conf autoindex.load cgi.load deflate.conf deflate.load dir.conf dir.load env.load geoip.conf geoip.load mime.conf mime.load negotiation.conf negotiation.load perl.load php5.conf php5.load reqtimeout.conf reqtimeout.load rewrite.load setenvif.conf setenvif.load status.conf status.load
http://wiki.vpslink.com/Low_memory_MySQL_/_Apache_configurations schlägt für MySQL das vor:
[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-bdb uncommented unless required skip-bdb # For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required skip-innodb # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 [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
Meine /etc/mysql/my.cnf
[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 lc-messages-dir = /usr/share/mysql skip-external-locking bind-address = 127.0.0.1 key_buffer = 64M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 myisam-recover = BACKUP max_connections = 500 table_cache = 256 query_cache_limit = 1M query_cache_size = 16M expire_logs_days = 10 max_binlog_size = 100M skip-innodb default-storage-engine=myisam [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/
Passen da irgendwelche Werte bei MySQL nicht zusammen bzw. wo könnte ich sparen bzw. was ist sehr knapp bemessen?