在 CentOS 上优化 PHP 配置,通常分为 PHP-FPM / PHP-CLI 配置优化、系统层面优化、业务层面优化 三部分。下面以 CentOS 7/8 + PHP-FPM(Nginx/Apache 常见组合) 为例说明。
php -i | grep "Loaded Configuration File"
常见路径:
/etc/php.ini/etc/php-fpm.conf、/etc/php-fpm.d/www.conf修改后重启:
systemctl restart php-fpm
memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 60
max_input_time = 60
生产环境:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
编辑:
vi /etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
计算方法(经验):
max_children ≈ 服务器内存 / 单个PHP进程占用
例如:
listen = /run/php-fpm/www.sock
Nginx 中:
fastcgi_pass unix:/run/php-fpm/www.sock;
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 2s
yum install php-opcache
php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=0 ; 生产环境
ulimit -n 65535
永久:
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
sysctl -p
| 场景 | 建议 |
|---|---|
| 高并发 API | 少进程 + OPcache |
| 后台任务 | CLI + 队列 |
| 内存小 | pm = ondemand |
| 大文件 | 调整 upload 参数 |
php-fpm -t
top -c | grep php-fpm
ab -n 1000 -c 100 http://site/test.php
如果你能提供:
我可以给你一套 可直接用的配置模板。