【发布时间】:2012-03-01 12:53:29
【问题描述】:
我们在服务器上的“平均负载”有一个奇怪的问题,我们试图解决这个问题但没有成功,现在我们试图寻求帮助。
我们有一个 VPS CentOS Linux 2.6.18-274.18.1.el5 x86_64 GNU/Linux,有 2 个物理内核,2GB RAM,这个服务器只运行 php-fpm 5.3.10,没有运行其他服务。
php 通过 TCP 使用 Redis(每秒约 1000 个请求),Redis 服务器可以轻松地每秒发出 60000 个请求,并且 LA 为 0.01。
症状:
LA 随机峰值从 16 到 40,没有明显原因。尽管 CPU 使用率约为 40%,但系统使用率约为 10%,内存使用率不到一半。
Cpu0 : 36.7%us, 11.9%sy, 0.0%ni, 44.2%id, 0.0%wa, 0.0%hi, 7.2%si, 0.0%st
Cpu1 : 39.8%us, 10.0%sy, 0.0%ni, 26.2%id, 0.0%wa, 10.0%hi, 14.0%si, 0.0%st
Mem: 2058776k total, 1241500k used, 817276k free, 160172k buffers
Swap: 1048568k total, 0k used, 1048568k free, 876888k cached
峰值与网络活动或 cron 作业无关。 每秒对 php 的请求量约为 70。
PHP 慢日志告诉我们,很多脚本甚至在 5 秒后都无法运行! php慢日志(5s):
[pool www] pid 7016
script_filename = /var/www/myapp/index.php
[0x000000001820d230] session_start() /var/www/myapp/index.php:10
index.php 的前 10 行:
<?php
$starttime=microtime(TRUE);
srand();
ob_start();
error_reporting(E_ALL);
ini_set('display_errors',1);
session_start();
位于内存分区的会话... IO 没有问题。
配置 php-fpm:
listen.backlog = 18192
pm = dynamic
pm.max_children = 256
pm.start_servers = 48
pm.min_spare_servers = 16
pm.max_spare_servers = 64
pm.max_requests = 512
如果有人对如何降低 LA 和延迟有任何建议。
【问题讨论】: