linux 大神们,求助
- 0次
- 2021-07-09 21:03:40
- idczone
最近我由于自己的服务器在运行一段时间后非常的慢(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,
22623 0.000017 poll ([{fd=13, events=POLLIN}], 1, 60000
这个 semop resumed 怎么花费了那么长的时间呢?
20308 0.000059 select (0, NULL, NULL, NULL, {1, 0}
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 也是
semop resumed 和 poll resumed 肯定不是 CPU 100%的根源, 进程从睡眠恢复.
拿 poll 来说, poll 的过程如果没有可读写的 socket, poll 进程阻塞睡眠, 直到 socket 有数据后恢复.
用 systemtap 追踪一下.
内存用完了吗?
用 perf 来跟踪就知道了
内存没用完,还有剩余的
行 我试试
先从 httpd 的日志开始分析起吧, systemd/perf 的结果都太底层了,不太好和业务模块对应起来。
http 的日志就是没看出任何问题,所以才选择了用 strace 来看。
22664 0.000019 <... semop resumed> ) = 0 <51.495516> 我只是觉得这个最后花费的时间太长了 估计有问题
0.01s 的延时,如果是偶尔出现,可能是调度延时。
如果平均下来都有 0.01s 的延时,有可能是信号量竞争太多了,是不是进程开太多了。
换 nginx 。。。 strace -t -r
现在就是偶尔打开页面很慢,估计要 10 几秒才能 load 出页面。 目前配置看来,我的 httpd 的进程不多,配置如下
StartServers 2
MinSpareServers 2
MaxSpareServers 5
ServerLimit 100
MaxClients 80
MaxRequestsPerChild 30
再调查一周试试,不行就准备换到 nginx 了
看看是不是有人用 php 漏洞在打你的服务器
没有哈,是我自己的内部服务器,就团队几个人自己人在用
采用默认设置也如此吗? php 用的什么模块?
配置上,进程数太高。
根源可能是代码问题,比如"死循环"啥的
是么?你是指的是 maxClients 太高了?我已经把这个调低了,最初的设置是 200 多。可是还是不行。 目前这个机器上搭建的就是个 wordpress 和 mediawiki,没有做二次开发
默认的配置就是一直有问题我才一直在调优。。 目前 php 用的 apache 的 php5_module
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 有这些模块加载
可以打开 apache 的 status 模块,看一下 CPU 100%的进程在处理什么请求? 尽量缩小查找问题的范围
难道是 php 版本太高?换个版本试试?
php 有个慢查询记录
换个内存