V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
klakekent
V2EX  ›  Linux

linux 大神们,求助

  •  
  •   klakekent · 2015-08-17 09:59:32 +08:00 · 4584 次点击
    这是一个创建于 3421 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近我由于自己的服务器在运行一段时间后非常的慢(centos+apache+mysql+php ), 经过 top 查看 httpd 的进程在慢的时候占用了 100%的 cpu ,所以我决定用 strace 来看一下到底干了些啥,可是有些地方看不懂,大神们帮忙解释下啊,有几句我觉得很有疑问的 log 如下:

    22565 0.000011 semop (6029319, {{0, 1, SEM_UNDO}}, 1 ) = 0 <0.000011>
    22664 0.000019 <... semop resumed> ) = 0 <51.495516>
    22565 0.011550 getsockname (13, <unfinished ...>
    22623 0.000017 poll ([{fd=13, events=POLLIN}], 1, 60000 <unfinished ...>

    这个 semop resumed 怎么花费了那么长的时间呢?


    20308 0.000059 select (0, NULL, NULL, NULL, {1, 0} <unfinished ...>
    22548 0.819556 <... poll resumed> ) = 1 ([{fd=13, revents=POLLIN}]) <15.960587>
    22548 0.000041 read (13, "", 8000 ) = 0 <0.000090>
    22548 0.000112 shutdown (13, SHUT_WR ) = 0 <0.000010>
    22548 0.000022 poll ([{fd=13, events=POLLIN}], 1, 2000 ) = 1 ([{fd=13, revents=POLLIN|POLLHUP}]) <0.000005>

    这个 poll resumed 也是
    20 条回复    2015-08-22 02:23:43 +08:00
    dafang
        1
    dafang  
       2015-08-17 11:00:51 +08:00
    semop resumed 和 poll resumed 肯定不是 CPU 100%的根源, 进程从睡眠恢复.

    拿 poll 来说, poll 的过程如果没有可读写的 socket, poll 进程阻塞睡眠, 直到 socket 有数据后恢复.

    用 systemtap 追踪一下.
    rhwood
        2
    rhwood  
       2015-08-17 11:13:56 +08:00
    内存用完了吗?
    airqj
        3
    airqj  
       2015-08-17 11:23:34 +08:00
    用 perf 来跟踪就知道了
    klakekent
        4
    klakekent  
    OP
       2015-08-17 11:36:17 +08:00
    @rhwood 内存没用完,还有剩余的
    klakekent
        5
    klakekent  
    OP
       2015-08-17 11:36:29 +08:00
    @dafang
    @airqj 行 我试试
    jxiewei
        6
    jxiewei  
       2015-08-17 12:11:15 +08:00
    先从 httpd 的日志开始分析起吧, systemd/perf 的结果都太底层了,不太好和业务模块对应起来。
    klakekent
        7
    klakekent  
    OP
       2015-08-17 12:19:06 +08:00
    @jxiewei http 的日志就是没看出任何问题,所以才选择了用 strace 来看。

    22664 0.000019 <... semop resumed> ) = 0 <51.495516> 我只是觉得这个最后花费的时间太长了 估计有问题
    jxiewei
        8
    jxiewei  
       2015-08-17 12:38:17 +08:00
    @klakekent 0.01s 的延时,如果是偶尔出现,可能是调度延时。
    如果平均下来都有 0.01s 的延时,有可能是信号量竞争太多了,是不是进程开太多了。
    henryon
        9
    henryon  
       2015-08-17 12:45:37 +08:00
    换 nginx 。。。 strace -t -r
    klakekent
        10
    klakekent  
    OP
       2015-08-17 13:09:30 +08:00
    @jxiewei 现在就是偶尔打开页面很慢,估计要 10 几秒才能 load 出页面。 目前配置看来,我的 httpd 的进程不多,配置如下
    <IfModule prefork.c>
    StartServers 2
    MinSpareServers 2
    MaxSpareServers 5
    ServerLimit 100
    MaxClients 80
    MaxRequestsPerChild 30
    </IfModule>

    @henryon 再调查一周试试,不行就准备换到 nginx 了
    kof21411
        11
    kof21411  
       2015-08-17 15:37:06 +08:00
    看看是不是有人用 php 漏洞在打你的服务器
    klakekent
        12
    klakekent  
    OP
       2015-08-17 16:29:50 +08:00
    @kof21411 没有哈,是我自己的内部服务器,就团队几个人自己人在用
    ctexlive
        13
    ctexlive  
       2015-08-17 17:47:45 +08:00 via Android
    采用默认设置也如此吗? php 用的什么模块?
    pubby
        14
    pubby  
       2015-08-17 18:01:52 +08:00
    配置上,进程数太高。

    根源可能是代码问题,比如"死循环"啥的
    klakekent
        15
    klakekent  
    OP
       2015-08-17 18:12:41 +08:00
    @pubby 是么?你是指的是 maxClients 太高了?我已经把这个调低了,最初的设置是 200 多。可是还是不行。 目前这个机器上搭建的就是个 wordpress 和 mediawiki,没有做二次开发

    @ctexlive 默认的配置就是一直有问题我才一直在调优。。 目前 php 用的 apache 的 php5_module
    klakekent
        16
    klakekent  
    OP
       2015-08-17 18:16:48 +08:00
    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule authn_alias_module modules/mod_authn_alias.so
    LoadModule authn_default_module modules/mod_authn_default.so
    LoadModule authz_host_module modules/mod_authz_host.so
    LoadModule authz_user_module modules/mod_authz_user.so
    LoadModule authz_default_module modules/mod_authz_default.so
    LoadModule ldap_module modules/mod_ldap.so
    LoadModule include_module modules/mod_include.so
    LoadModule log_config_module modules/mod_log_config.so
    LoadModule logio_module modules/mod_logio.so
    LoadModule env_module modules/mod_env.so
    LoadModule expires_module modules/mod_expires.so
    LoadModule deflate_module modules/mod_deflate.so
    LoadModule headers_module modules/mod_headers.so

    LoadModule setenvif_module modules/mod_setenvif.so
    LoadModule mime_module modules/mod_mime.so

    LoadModule autoindex_module modules/mod_autoindex.so

    LoadModule vhost_alias_module modules/mod_vhost_alias.so
    LoadModule negotiation_module modules/mod_negotiation.so
    LoadModule dir_module modules/mod_dir.so
    LoadModule actions_module modules/mod_actions.so

    LoadModule alias_module modules/mod_alias.so
    LoadModule substitute_module modules/mod_substitute.so
    LoadModule rewrite_module modules/mod_rewrite.so

    LoadModule cache_module modules/mod_cache.so
    LoadModule suexec_module modules/mod_suexec.so
    LoadModule disk_cache_module modules/mod_disk_cache.so

    目前除了 php 有这些模块加载
    pubby
        17
    pubby  
       2015-08-17 18:51:32 +08:00
    可以打开 apache 的 status 模块,看一下 CPU 100%的进程在处理什么请求? 尽量缩小查找问题的范围
    darluc
        18
    darluc  
       2015-08-18 01:19:30 +08:00
    难道是 php 版本太高?换个版本试试?
    chaegumi
        19
    chaegumi  
       2015-08-18 15:17:57 +08:00
    php 有个慢查询记录
    adrianzhang
        20
    adrianzhang  
       2015-08-22 02:23:43 +08:00
    换个内存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:37 · PVG 20:37 · LAX 04:37 · JFK 07:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.