- nginx错误日志中报出:php fastcgi 连接超时,查看nginx和php-fpm的timeout值没有问题
报错信息(nginx错误日志) : 2012/06/03 11:24:02 [error] 920#0: *6197285 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 220.255.1.90, server: localhost, request: "POST /api/api.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "50.XX.XX.XX", referrer: "app:/XXX.swf"
解决方案 : 通过增加php-fpm子进程提高php处理能力,pm.max_children值从50升到100,同进增加pm.start_servers,pm.min_spare_servers,pm.max_spare_servers的值
- production服务器推荐错误处理等级
建议使用error_reporting = E_ALL & ~E_DEPRECATED,日志中记录notice,方便查错,比如memcached连接问题等很多关键性错误为notice级别
- 上线游戏后,要将所有的notice问题解决掉,并监控nginx日志
目的 : 保证游戏没有任何错误信息出现,出现错误信息及时处理方案 : 首先,游戏上线后,一定做的一步操作就是监控错误日志,处理任何错误信息;定时脚本,发现错误日志有内容,发送邮件,监控错误日志
- nginx错误日志中报出:php fastcgi 连接超时,查看nginx和php-fpm的timeout值没有问题,通过增加max_children仍不能解决问题
原因分析 : 查看服务器load_average,结果发现负载过大。继续分析程序,发现程序里由php读文件并通过流传输给前端图片。解决方案 : php不到万不得已不采取流的方式传输图片给客户端,由nginx直接将图片传给客户端;查看nginx是否keep_alive长连接,如果是停掉keep_alive功能,可以减轻负载,并发量太大的情况也需要关掉keep_alive功能解决后又出现新问题 : 服务器负载降下来,但仍出现连接超时导致php-fpm堵塞现象解决方案 : 打开php-fpm慢日志,request_slowlog_timeout = 30s(php-fpm模式下max_execution_time无效),slowlog = /usr/local/webserver/php/var/log/php-fpm.log.slow限制php-fpm最长执行时间,request_terminate_timeout = 30s记录load average日志,每分钟读取一次服务器load average并记录到日志文件通过日志监控发现问题 : php-fpm慢日志,不会记录慢脚本执行全过程,只会记录php-fpm认为导致整个脚本慢的执行步骤;php脚本执行时间超过10秒(不同服务器可能不一样)会导致CPU使用率过高,所以php不适合长请求的处理,只适合短请求处理解决方案 : 避免长处理,如果有长处理,使用其它解决方案
- nginx, php-fpm status监控
问题 : php-fpm经常down掉,暂找不到问题临时解决方案 : 找开nginx status和php-fpm status/ping/pong,通过人工监控高峰期状态;编写脚本,通过status监控发现问题并重启php-fpm新问题 : 当php-fpm堵塞时,php-fpm ping仍能正常返回值,所以脚本不会重启php-fpm解决方案 : 写一个测试php文件,通过监控此文件是否能正常反问来重启php-fpm
- yum报错
问题 : centos5.5执行yum命令报错,primary.sqlite.bz2: Metadata file does not match checksum解决 : cd /var/cache/yum/addonssudo yum clean allsudo yum makecachesha1sum primary.sqlite.bz2更改primary_db值为sha1sum结果<checksum type="sha">0e039f885793bddf6c3bf9821a51ff0983fffb76</checksum>