高负载PHP-FPM调优

回复 收藏

转载自:http://www.linuxidc.com/Linux/2013-07/86963.htm


swap并不是越多越好?
早起的文章会提到,swap通常设置为物理内存的2倍,但是现在年代不一样了,添加太多了根本用不到。个人建议:2G和2G以下的,设置成和物理内存相同容量swap,2G以上的,设置为2G。
8G以上的机器可以不再设置swap,PHP的memory_limit,处理PHP的进程数量(Apache或者php-fpm),把这些协调好,不要让内存在访问高峰宕机


高负载PHP调优

针对PHP的Linux调优

调整文件描述符限制

# ulimit -n 1000000
# vi /etc/security/limits.conf
# Setting Shell Limits for File Descriptors
*  soft nofile 1000000
*  hard nofile 1000000
禁止PHP代码文件所在分区的文件系统访问时间更新

# vi /etc/fstab
比如PHP代码所在分区:

/dev/sdb1   ext4    errors=remount-ro  0  1
修改为:

/dev/sdb1   ext4    noatime,nodiratime,errors=remount-ro  0  1
将临时文件存储到tmpfs

在需要处理大量的小图片(比如:用户头像)上传的时候,使用内存文件系统tmpfs来存储,可以减少一些I/O的开销.但是如果用户是上传非常大的文件(比如:视频)的话,就不适合使用tmpfs.

# vi /etc/fstab
tmpfs                   /tmp                    tmpfs   defaults,nosuid,noatime 0 0
PHP配置调优

php.ini配置调优

# vi php-app.ini
[PHP]
engine = On
expose_php = Off

max_execution_time = 5  默认30 单位秒
memory_limit = 256M   默认128M
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
html_errors = Off
default_socket_timeout = 5

file_uploads = On
upload_tmp_dir = /tmp/php
upload_max_filesize = 50M
post_max_size = 50M
max_file_uploads = 20

date.timezone = 'Asia/Shanghai'
注意这里设置max_execution_time只有5秒.对于一个快的web应用来说,我们真的不想要web应用里有任何长时间运行的web请求,一个web请求持续超过5秒通常意味着有些东西出了问题.我们的目标是页面响应在300-500ms(微秒)之内.

PHP-FPM配置调优
# vi php-fpm.conf
[my_app]
;FastCGI/PHP-FPM使用UNIX Sockets
listen = /data/my_app/tmp/php.sock
listen.backlog = 300
user = www
group = www
pm = dynamic
;估算pm.max_children = (MAX_MEMORY - 500MB) / 20MB
pm.max_children = 100
;推荐为最大的pm.max_children的%10
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 1000
pm.status_path = /php_status

request_terminate_timeout = 0
request_slowlog_timeout = 0
slowlog = /data/my_app/logs/slow.log

2015-12-30 11:10 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: