【问题标题】:Unexplainable Load Average CentOS Linux php-fpm无法解释的平均负载 CentOS Linux php-fpm
【发布时间】: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 和延迟有任何建议。

【问题讨论】:

    标签: linux centos php


    【解决方案1】:

    平均负载是衡量在任何给定时间运行队列中的进程数。它本身并不是衡量您的机器过载程度的指标,而且您的平均负载有时会飙升可能不是问题 - 这并不一定意味着机器过载。

    如果没有额外的信息说明您认为平均负载存在问题的原因以及机器遇到的负载情况,很难更详细地回答。

    【讨论】:

    • 通常脚本的执行最多需要 100 毫秒,但是当 LA 达到峰值时,脚本的执行需要 5 秒甚至更多。 -rwxrwxrwx 1 root root 27M Mar 1 05:11 /var/log/php-fpm/www-slow.log 就像我们看到一周的慢低是 27Mb,这不是正常情况。
    • 所以你的问题与平均负载无关,它是“为什么这个脚本突然需要这么长时间才能执行”。你做了什么来尝试调试这个问题?
    • 我们在开发克隆服务器上尝试了 strace、apd,我们从 php-fpm 切换到 Apache,我们调试了脚本,但一无所获。我想说的是我不知道在哪里看。所有慢日志的结尾都是 socket_write、socket_read 或 session_start。会不会是 TCP/IP 配置有问题?
    • 我强烈怀疑 TCP 配置是否存在问题。
    • Redis 发送了很多 1 到 10 字节的小包,请问如何配置系统?
    【解决方案2】:

    我认为你的 2GB 内存的 PHP 配置很高,尝试减少 start_servers 检查此配置Install PHP 5.3.10 with PHP-FPM on CentOS 6.2

    【讨论】:

      猜你喜欢
      • 2019-10-13
      • 2012-02-29
      • 1970-01-01
      • 2016-09-08
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2014-07-08
      相关资源
      最近更新 更多