真的是有点无语,今天无聊点了下之前部署的几个网站服务,发现返回 502 错误,以为是服务器挂掉了。
结果还能登录,一切操作正常,赶紧排查,最后锁定了问题,是 PHP 服务挂掉了。
查看了下 php-fpm 状态,已经停止服务了,有一条错误信息:php-fpm.service: A process of this unit has been killed by the OOM killer.
OOM-killer 是啥
OOM全称是Out Of Memory,这是 Linux 的 “内存保护机制”。
当系统内存耗尽时,为了防止崩溃,会自动选择 “吃内存最多” 或 “不重要” 的进程杀掉,以保证系统核心服务不崩溃。
而在我这里,因为主要用的服务还是 php-fpm,所以理所当然的,它就被停止了。
原因找到,重启下 php-fpm 服务,网站就都恢复了。
更多
如果服务器内存太小,还是挺容易导致 php-fpm 或者 mysqld 服务挂掉的,可以考虑增加内存或者优化服务配置来解决下,比如我这里,可以考虑调整下 php-fpm 的 pm 模式,或者调整下 mysql 的 innodb_buffer_pool_size 等。
另外,交换内存也是一个不错的选择,可以在内存不足时,把一部分硬盘空间当作内存使用,这样可以避免 OOM-killer 杀掉服务。











