CentOS 不定时 OOM 根治方案:PHP-FPM 进程管控 + Swap 扩容 + 全维度监控

一、PHP-FPM 完整配置文件(PHP 7.1)

适配 8G 内存服务器,直接替换 /www/server/php/71/etc/php-fpm.d/www.conf(宝塔面板路径),替换前先备份原文件:cp /www/server/php/71/etc/php-fpm.d/www.conf /www/server/php/71/etc/php-fpm.d/www.conf.bak

ini 复制代码
[www]
user = www
group = www
listen = /tmp/php-cgi-71.sock
listen.owner = www
listen.group = www
listen.mode = 0666
pm = dynamic
pm.max_children = 30
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 12
pm.max_requests = 2000
pm.process_idle_timeout = 10s
request_terminate_timeout = 60
request_slowlog_timeout = 30
slowlog = /www/server/php/71/var/log/slow.log
php_admin_value[error_log] = /www/server/php/71/var/log/error.log
php_admin_flag[log_errors] = on
php_value[memory_limit] = 256M
php_value[post_max_size] = 50M
php_value[upload_max_filesize] = 50M
php_value[max_execution_time] = 60
php_value[max_input_time] = 60
php_value[max_input_vars] = 1000
php_value[session.save_path] = /tmp
php_value[session.gc_maxlifetime] = 1440
php_value[short_open_tag] = On
php_value[date.timezone] = Asia/Shanghai

二、MySQL 5.7.4 完整配置文件

替换 /etc/my.cnf(宝塔面板路径),备份原文件:cp /etc/my.cnf /etc/my.cnf.bak

ini 复制代码
[mysqld]
server-id = 1
port = 3306
user = mysql
datadir = /www/server/data
socket = /tmp/mysql.sock
pid-file = /www/server/data/mysql.pid
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
skip-name-resolve = 1
max_connections = 1000
max_connect_errors = 100000
table_open_cache = 1024
table_definition_cache = 1024
# 核心内存限制(8G内存适配)
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
# 临时表/堆表限制(防内存暴涨)
tmp_table_size = 64M
max_heap_table_size = 64M
# 关闭查询缓存(MySQL5.7已废弃,开了反而占内存)
query_cache_type = 0
query_cache_size = 0
# 其他优化
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
binlog_cache_size = 1M
max_allowed_packet = 500M
interactive_timeout = 28800
wait_timeout = 28800
lower_case_table_names = 1
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 7
slow_query_log = 1
slow_query_log_file = /www/server/data/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 0

三、Nginx 1.28 核心优化配置(补充)

编辑 /etc/nginx/nginx.conf,重点优化 worker 进程和连接数:

nginx 复制代码
user  www www;
worker_processes  auto;  # 自动匹配CPU核心数
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

error_log  /var/log/nginx/error.log  warn;
pid        /var/run/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;
    client_max_body_size 50M;  # 匹配PHP上传限制

    # 开启gzip压缩,减少传输量
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;

    include /etc/nginx/conf.d/*.conf;
}

四、配置生效步骤

bash 复制代码
# 重启PHP-FPM 7.1
systemctl restart php-fpm-71

# 重启MySQL 5.7
systemctl restart mysqld

# 重启Nginx 1.28
systemctl restart nginx

# 验证服务是否正常启动
systemctl status php-fpm-71
systemctl status mysqld
systemctl status nginx

总结

  1. PHP-FPM 核心:限制最大进程数(30)+ 进程自动重启(2000请求)+ 单脚本内存(256M),从源头防内存泄漏/暴增;
  2. MySQL 核心:InnoDB缓冲池限制2G(8G内存50%)+ 关闭查询缓存 + 限制临时表大小,避免内存膨胀;
  3. 系统兜底:提前配置2G Swap + 内存过度分配保护,即使突发峰值也不会直接OOM杀进程。

8G内存的CentOS服务器可彻底解决不定时OOM问题,同时保证业务性能。

相关推荐
CRMEB系统商城2 小时前
CRMEB标准版系统(PHP)v6.0公测版发布,商城主题市场上线~
java·开发语言·小程序·php
沐晨API3 小时前
最新API管理系统
php
恋猫de小郭3 小时前
Android 性能迎来提升:内核引入 AutoFDO 普惠所有 15-16 设备
android·前端·flutter
CS_Zero3 小时前
Android ADB调试工具使用简记
android·adb
牢七4 小时前
Slim-4.x php审计 报错分析
android·开发语言·ide·安全·php
xiegwei4 小时前
Android 调起第三方导航
android
AirDroid_cn4 小时前
Android 15 :如何让特定应用通知仅在锁屏显示横幅?
android·智能手机
zh_xuan4 小时前
android ARouter配置降级服务
android·arouter
常利兵4 小时前
Android开发秘籍:接口加解密全解析
android