由于我使用的是AMH 4.2面板环境,有时会遇到这样的情况。
某一个网站例如baddb.com打不开,但是这台主机上的其它网站又可以打开。
查看内存,负载,CPU的占用情况又都是正常的。
使用netstat -an 命令,才发现,有大量的如下进程,似乎是僵死了。
unix 2 [ ACC ] STREAM LISTENING 3429 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3430 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3431 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3432 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3433 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3434 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3435 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3436 /tmp/php-cgi-baddb.com.sock unix 2 [ ACC ] STREAM LISTENING 3437 /tmp/php-cgi-baddb.com.sock
于是经过多方摸索,多次解决失败又重新继续摸索,终于近期不再有这类现象,现将具体处理方法记录。
1:句柄优化
涉及系统允许同时打开的句柄,php-fpm允许同时打开的句柄,mysql允许同时打开的句柄等方面。
使用ulimit -n命令来查看数值。默认发现为1024,我们需要加大该值。
vi /etc/security/limits.conf在对应处加上例如
* - nofile 8192该值为系统允许的文件句柄打开数量总开关,因此该值的大小决定了例如php-fpm,apache,nginx,mysql等其它服务能够同时打开句柄的数量值。
本项修改需要重新登录SSH,再执行以下命令,才能看到是否生效。
ulimit -n
2:php-fpm优化
在AMH4.2中装有php5.2和php5.3两种版本,因此使用对应站点使用不同的PHP版本,需要分别优化。
- php5.3,在/usr/local/php/etc/fpm/baddb.com.conf中,需要添加
pm.max_requests = 8192 rlimit_files = 51200保存,并/etc/init.d/amh-start 重启AMH环境生效。
- php5.2,在/usr/local/php-5.2/etc/fpm/baddb.com.conf中,修改或确保以下两项参数值
<value name="max_requests">8192</value> <value name="rlimit_files">51200</value>保存,并/etc/init.d/amh-start 重启AMH环境生效。
3:mysql优化
如果是数据库大量读写,导致MYSQL有大量进程滞留,那么通常在MYSQL的错误日志中能看到如下类似的纪录。
[ERROR] Error in accept: Too many open files,[ERROR] /usr/sbin/mysqld: Can’t find file: ‘./xxxxx/wp-xxxxx.frm’ (errno: 24),[ERROR] /usr/sbin/mysqld: Sort aborted,打开vi /etc/my.cnf文件,在[mysqld]标签段中添加一行:
open_files_limit = 8192然后/etc/init.d/amh-start或单独重启MYSQL即可。
4:apache优化
由于本人使用的是官方amh4.2 + 额外集成apache2.4版本,因此顺带将apache也优化一下。
本人的apache2.4安装在 /usr/local/apache2/下。
因此,在/usr/local/apache2/conf/httpd.conf中,在“Include conf/default.conf”行之前,添加如下两行参数
ProxyTimeout 3000 Timeout 3000由于在apache 2.4中,有三种MPM模式(详细可点击)。因此需要先查看当前使用的是什么模式。
root@localhost ~]# /usr/local/apache2/bin/apachectl -l Compiled in modules: core.c mod_so.c http_core.c event.c加粗的event.c,表明使用的是mpm_event_module模式。
编辑 /usr/local/apache2/conf/extra/httpd-mpm.conf 文件,在<IfModule mpm_event_module>标签下,修改为如下参考值<IfModule mpm_event_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 500 ThreadsPerChild 100 MaxRequestWorkers 2000 MaxConnectionsPerChild 0 </IfModule>最后,重启apache或/etc/init.d/amh-start生效。