我有一台配备 1GB 内存的专用服务器,用于服务一些 wordpress 网站,但是在对一些 wordpress 网站进行测试(ab:apache benmark,使用 -n 100 -c 10)时,服务器开始交换,然后就像死机一样......
因此,我的问题是,如何为此目的调整 apache 和 mysql?我在 apache 中使用 php5 中的 mpm_worker
关于调整 apache.conf 和 my.cnf 文件有什么建议吗?
编辑: 我一直试图收集更多数据来发布在这里,但由于我的服务器不断因交换而死机,所以我将发布我现在拥有的任何数据:
apache2.conf
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 20
MaxSpareThreads 50
ThreadLimit 64
ThreadsPerChild 25
MaxClients 75
MaxRequestsPerChild 0
</IfModule>
my.cnf(在 [mysqld] 内)
key_buffer_size = 32M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
join_buffer_size = 128K
myisam-recover = BACKUP
max_connections = 120
table_cache = 128
max_heap_table_size = 32M
tmp_table_size = 32M
table_open_cache = 128
query_cache_limit = 1M
query_cache_size = 16M
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
expire_logs_days = 10
max_binlog_size = 100M
ps aux --sort -pcpu,-rss | head -n 30
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 11558 13.0 1.9 173280 20112 ? R 13:59 0:00 /usr/lib/cgi-bin/php5
www-data 11529 14.0 3.6 190352 37192 ? R 13:59 0:00 /usr/lib/cgi-bin/php5
www-data 11528 14.0 3.7 190784 37628 ? R 13:59 0:00 /usr/lib/cgi-bin/php5
www-data 11526 16.5 3.9 192836 39580 ? R 13:59 0:00 /usr/lib/cgi-bin/php5
svn 1909 4.2 0.3 91780 3628 ? S 12:49 3:01 /usr/bin/svnserve --daemon --foreground -T -r /home/svn
mysql 7780 1.1 6.4 263812 64816 pts/1 Sl 13:43 0:11 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root 856 1.1 0.0 0 0 ? D 12:48 0:49 [md3_resync]
root 325 0.5 0.0 0 0 ? S 12:48 0:22 [md3_raid1]
www-data 1731 0.3 1.1 449516 11232 ? Sl 12:49 0:13 /usr/sbin/apache2 -k start
www-data 1732 0.2 1.0 383548 10408 ? Sl 12:49 0:12 /usr/sbin/apache2 -k start
bind 1244 0.0 1.0 125576 11096 ? Ssl 12:48 0:02 /usr/sbin/named -u bind
root 1235 0.0 0.0 3864 300 ? SNs 12:48 0:02 /usr/sbin/powernowd -q
postgres 1420 0.0 0.6 105560 6764 ? S 12:48 0:01 /usr/lib/postgresql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=/etc/postgresql/8.4/main/postgresql.conf
danikaze 5068 0.0 0.4 24512 4112 pts/1 Ss 13:17 0:00 -bash
root 1 0.0 0.0 8356 788 ? Ss 12:48 0:00 init [2]
root 1143 0.0 0.2 41148 2636 ? Sl 12:48 0:00 /usr/sbin/monit -c /etc/monit/monitrc -s /var/lib/monit/monit.state
danikaze 2778 0.0 0.4 24632 4216 pts/0 Ss 12:49 0:00 -bash
postgres 1535 0.0 0.2 105668 2860 ? Ss 12:49 0:00 postgres: writer process
root 56 0.0 0.0 0 0 ? S 12:48 0:00 [kswapd0]
danikaze 2777 0.0 0.1 70496 1816 ? S 12:49 0:00 sshd: danikaze@pts/0
postgres 1536 0.0 0.1 105560 1584 ? Ss 12:49 0:00 postgres: wal writer process
root 2529 0.0 0.0 0 0 ? S 12:49 0:00 [flush-253:2]
root 1627 0.0 0.5 90628 5360 ? Ss 12:49 0:00 /usr/sbin/apache2 -k start
root 1689 0.0 0.0 16780 804 ? S 12:49 0:00 /usr/sbin/rotatelogs -l /home/***.com.log.%Y-%m-%d 86400
postgres 1538 0.0 0.1 77108 1516 ? Ss 12:49 0:00 postgres: stats collector process
root 968 0.0 0.0 0 0 ? S 12:48 0:00 [flush-253:1]
root 7639 0.0 0.1 13940 1484 pts/1 S 13:43 0:00 /bin/sh/usr/bin/mysqld_safe
ntp 1237 0.0 0.2 38340 2148 ? Ss 12:48 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:106
免费-m
total used free shared buffers cached
Mem: 986 769 216 0 37 532
-/+ buffers/cache: 199 787
Swap: 3827 0 3827
我会在服务器交换时尝试再次获取数据,但我不知道原因,即使我用 ab 对服务器施加压力,我唯一得到的只是 CPU 和 MEM 的使用,但没有交换现在我为 wordpress 安装了缓存...但我仍然会在某些时候得到服务器交换和挂起 :-/
另外:服务器基本都是用apache+mysql,虽然还有svnserver,proftpd,pgsql,但是几乎用不到。
答案1
由于您正在使用 mpm_worker,我强烈建议您使用 php5-fpm 而不是 mod_php。
此外,1GB 的 RAM 不足以运行一个稍微繁忙的 WordPress 网站。如果可能,您当然应该增加 RAM,因为这将提供最佳的性能提升。有了更多的 RAM,您可以确保您的 MySQL 索引得到缓存,使用 APC 等。
运行MySQL 调优入门脚本还将帮助您的 MySQL 设置良好的基线配置,以确保您不会浪费宝贵的资源。
还可以考虑在 /etc/sysctl.conf 中设置 vm.swappiness = 10 或 20,以防止发生早期交换。