linux 大神们,求助

2015-08-17 09:59:32 +08:00
 klakekent
最近我由于自己的服务器在运行一段时间后非常的慢(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 也是
4344 次点击
所在节点    Linux
20 条回复
dafang
2015-08-17 11:00:51 +08:00
semop resumed 和 poll resumed 肯定不是 CPU 100%的根源, 进程从睡眠恢复.

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

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

22664 0.000019 <... semop resumed> ) = 0 <51.495516> 我只是觉得这个最后花费的时间太长了 估计有问题
jxiewei
2015-08-17 12:38:17 +08:00
@klakekent 0.01s 的延时,如果是偶尔出现,可能是调度延时。
如果平均下来都有 0.01s 的延时,有可能是信号量竞争太多了,是不是进程开太多了。
henryon
2015-08-17 12:45:37 +08:00
换 nginx 。。。 strace -t -r
klakekent
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
2015-08-17 15:37:06 +08:00
看看是不是有人用 php 漏洞在打你的服务器
klakekent
2015-08-17 16:29:50 +08:00
@kof21411 没有哈,是我自己的内部服务器,就团队几个人自己人在用
ctexlive
2015-08-17 17:47:45 +08:00
采用默认设置也如此吗? php 用的什么模块?
pubby
2015-08-17 18:01:52 +08:00
配置上,进程数太高。

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

@ctexlive 默认的配置就是一直有问题我才一直在调优。。 目前 php 用的 apache 的 php5_module
klakekent
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
2015-08-17 18:51:32 +08:00
可以打开 apache 的 status 模块,看一下 CPU 100%的进程在处理什么请求? 尽量缩小查找问题的范围
darluc
2015-08-18 01:19:30 +08:00
难道是 php 版本太高?换个版本试试?
chaegumi
2015-08-18 15:17:57 +08:00
php 有个慢查询记录
adrianzhang
2015-08-22 02:23:43 +08:00
换个内存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/213678

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX