我有一台 VPS 机器,上面运行着一些网站和一些脚本,似乎内存不足。它总共有 1GB 内存。看起来 php-fpm 耗尽了内存。之前它只是简单地终止其他进程(如 mysql)来释放内存。
错误是:
php fpm has invoked oom-killer
我使用这个解决方案解决了这个问题:php-fpm 调用 oom-killer
接下来,我尝试配置各种 php-fpm 设置,但没有成功。我还将交换文件大小从 1GB 增加到 2GB(物理内存的 2 倍)。我总共运行 10 个小型网站,这些网站的流量并不大,所以我很困惑为什么内存会用完。除了为我的机器购买更多内存外,我还能做什么?
此时 php-fpm 似乎占用了整个 1GB 内存和大部分交换空间,在某些情况下,由于无法进行身份验证,它会阻止我访问 VPS!
正在运行:
service php-fpm restart
立即释放机箱上的几乎所有内存(即,使用的 950/990 变为使用的 200/990)。那么我有什么选择?如果需要,我还可以发布相关的配置文件。
相关规格: 操作系统:Centos 6.7 x86_64 内存:1GB 交换:2GB php 版本:PHP 5.5.35 (cli) (构建时间:2016 年 4 月 29 日 09:07:44) php-fpm 版本:PHP 5.5.35 (fpm-fcgi) (构建时间:2016 年 4 月 29 日 09:09:09)
答案1
(这应该是一条评论,但是有点长)。
“我用这个解决方案解决了这个问题”——不幸的是,那里的大多数观点都是错误的。
php fpm has invoked oom-killer
这意味着:
您的系统配置为过度使用内存。当您必须管理用面向对象语言(如 Java)编写的编写不当、长时间运行的进程以及运行大量非活动客户的虚拟机主机时,内存过度使用非常有用。两者似乎都不适用于此。按照建议将 overcommit_memory 设置为 2 将禁用过度使用 - 那么 Chris 建议在禁用时将 overcommit_ratio 设置为 80%(默认值通常约为 50%),这到底是为什么???
PHP-FPM 请求更多内存,但内存已用完。这并不一定意味着 PHP-FPM 用完了所有内存。
您的问题是您使用的配置不适合您使用的框。但描述如何配置 Linux、PHP、MySQL 和 Web 服务器在这里有点题外。
重新启动 FPM 进程似乎可以解决问题建议问题出在 PHP-FPM 上,但这并不是确凿的证据。也许每个 PHP 进程都有一个打开的数据库连接。
由于您没有发布 php-fpm 配置,也没有提供任何有关您的网络服务器的详细信息,也没有给出任何有关响应时间的指标,因此无法在此回答这个问题。
要么花费大量的时间和精力学习如何衡量系统行为并进行调整,要么购买更多的内存。