vps ssh失败的原因和解决方法

Posted on Thu 24 June 2010 in 我用(IT)

新阳给我看了一篇文章,说无法ssh的原因是内存不够了,重启可以解决。刚才重启vps后又能登录了,查了一下日志,apache的错误日志说的都是out of memory,可以作为旁证。

这篇文章提到,一个php-cgi进程要缓存20m内存,于是立刻决定修改一下配置,就分10个PHP进程吧。

vi /etc/php5/apache2/php.ini

这个配置非常的长,看了一遍,还是决定先不改了。

又搜到这篇文章,说ubuntu下头默认安装的apache是用的prefork模式,比较费内存,建议改成worker模式的。查了一下配置中prefork的相关配置

# prefork MPM

StartServers: number of server processes to start

MinSpareServers: minimum number of server processes which are kept spare

MaxSpareServers: maximum number of server processes which are kept spare

MaxClients: maximum number of server processes allowed to start

MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule mpm_prefork_module> StartServers          5 MinSpareServers       5 MaxSpareServers      10 MaxClients           40 MaxRequestsPerChild   0 </IfModule>

把MaxRequestsPerChild改成50了。

这个指令设定一个独立的子进程将能处理的请求数量。在处理 “MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。

如果 MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动 子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存 较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。

启动apache生效:apache2ctl -k restart