为什么我的服务器 mysql 显示占 CPU 很高,改成远程数据库后,远程数据库的服务器的 mysql 进程完全不占 CPU?

2018-06-25 20:16:25 +08:00
 doufenger

这是一个很奇怪的问题。因为原来服务器经常高峰时期 502,然后看 top 是因为 mysql 占了很高的 CPU 资源,然后想着把数据库弄成远程的这样负载分离吧。

现在数据库弄到远程了,高峰期原来的服务器还是很高,从 top 看现在变成是有很多 php-fpm 进程,其中一个 php-fpm 占 cpu 比较高了。

奇怪的是远程数据库服务器,几乎一点负载都没有,这是什么情况?

3848 次点击
所在节点    Linux
19 条回复
hand515
2018-06-25 20:19:49 +08:00
磁盘 IO 有检查过没
doufenger
2018-06-25 20:22:37 +08:00
@hand515 磁盘 IO 能够检查什么?
R18
2018-06-25 20:27:37 +08:00
切回本地看看到底是哪条 SQL 占用长?测测本地连接与远程连接处理速率
hand515
2018-06-25 20:27:39 +08:00
先试试 iostat 看 avg-cpu
feverzsj
2018-06-25 20:30:08 +08:00
看 I/O wait percentage
likuku
2018-06-25 20:48:12 +08:00
原先是 php-fpm 和 mysql 都在同一台机? mysql 新旧机软硬件配置一样?
doufenger
2018-06-25 20:49:14 +08:00
@hand515
似乎 IO 没问题,空闲率 58%

avg-cpu: %user %nice %system %iowait %steal %idle
35.89 0.00 5.81 0.00 0.00 58.30

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 48.94 1486.61 1291.70 441954642 384010770
sdb 0.21 0.01 0.00 3112 0
dm-0 177.47 1486.49 1290.39 441919154 383621376
dm-1 0.18 0.10 1.31 28968 389336
dm-2 0.00 0.00 0.00 760
thread2
2018-06-25 20:53:21 +08:00
innotop
doufenger
2018-06-25 21:57:28 +08:00
@likuku 是的
a7a2
2018-06-25 22:52:47 +08:00
开启 php status 监控 看看 php 被请求次数 看是否被攻击
likuku
2018-06-25 22:53:35 +08:00
php-fpm 和 mysql 混在一台... 繁忙时,两者都在抢同一块资源,那必然是不行,

502 多,web 和 mysql 很可能那时都资源耗尽,既然已经分开了,新 mysql 这块,看来已经没啥问题,

php-fpm 负载高?最好开下 php 的 slow log,之后分析下日志,看看是哪些 php 慢。

再者,确认下你 php 足够新 (php7 or 更老)? php 的 opcache 加速有没有开?
遇到过 php 太老,且没有开任何加速功能,让 php-fpm 处理请求很慢,
被稍微密集访问时,php-fpm 就忙不过来,持续高 CPU 占用。

根据 slow log 针对性重写优化比较慢的一些 php 程序,也是个好办法。
doufenger
2018-06-26 10:31:36 +08:00
@likuku 安装 opcache 在最后一步出现这个情况了 求助大佬


[root@localhost zendopcache-7.0.5]# make && make install
/bin/sh /root/zendopcache-7.0.5/libtool --mode=compile cc -I. -I/root/zendopcache-7.0.5 -DPHP_ATOM_INC -I/root/zendopcache-7.0.5/include -I/root/zendopcache-7.0.5/main -I/root/zendopcache-7.0.5 -I/www/wdlinux/phps/56/include/php -I/www/wdlinux/phps/56/include/php/main -I/www/wdlinux/phps/56/include/php/TSRM -I/www/wdlinux/phps/56/include/php/Zend -I/www/wdlinux/phps/56/include/php/ext -I/www/wdlinux/phps/56/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/zendopcache-7.0.5/ZendAccelerator.c -o ZendAccelerator.lo
cc -I. -I/root/zendopcache-7.0.5 -DPHP_ATOM_INC -I/root/zendopcache-7.0.5/include -I/root/zendopcache-7.0.5/main -I/root/zendopcache-7.0.5 -I/www/wdlinux/phps/56/include/php -I/www/wdlinux/phps/56/include/php/main -I/www/wdlinux/phps/56/include/php/TSRM -I/www/wdlinux/phps/56/include/php/Zend -I/www/wdlinux/phps/56/include/php/ext -I/www/wdlinux/phps/56/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/zendopcache-7.0.5/ZendAccelerator.c -fPIC -DPIC -o .libs/ZendAccelerator.o
/root/zendopcache-7.0.5/ZendAccelerator.c:39:35: error: TSRM/tsrm_virtual_cwd.h: No such file or directory
/root/zendopcache-7.0.5/ZendAccelerator.c: In function ‘ accel_fast_zval_ptr_dtor ’:
/root/zendopcache-7.0.5/ZendAccelerator.c:2176: error: ‘ IS_CONSTANT_ARRAY ’ undeclared (first use in this function)
/root/zendopcache-7.0.5/ZendAccelerator.c:2176: error: (Each undeclared identifier is reported only once
/root/zendopcache-7.0.5/ZendAccelerator.c:2176: error: for each function it appears in.)
make: *** [ZendAccelerator.lo] Error 1
doufenger
2018-06-26 10:32:13 +08:00
我的是 PHP 5.6 的
doufenger
2018-06-26 10:54:19 +08:00
开了 Gzip On, Memcache On.
24 核的 CPU 平时 200-300 在线的时候负载才 二十多, 晚上到 400 了就负载 200-250 多。。频繁 502
likuku
2018-06-26 10:58:11 +08:00
@doufenger php 5.6 已经内建了 opcache 只需要开启即可:

使用 OpCache 提升 PHP 5.5+ 程序性能 | Laravel China 社区 - 高品质的 Laravel 开发者社区 : https://laravel-china.org/topics/301/using-opcache-to-enhance-the-performance-of-the-php-55-program

[SOLVED] PHP 5.6 with opcache : https://www.linuxquestions.org/questions/linux-software-2/php-5-6-with-opcache-4175588254/

不行的话,再查看 phpinfo() 确保 php 本身编译时已开启 --enable-opcache

# 善用搜索引擎,我只分别用了 php opcache tsrm_virtual_cwd.h error 和 opcache php 5.6 就 google 出了足够的资料
likuku
2018-06-26 11:09:32 +08:00
差点忘记了,当前你的 php 5.6 没安装 /启用 任何加速器么? (eaccelerator, APC, opcache)
doufenger
2018-06-26 22:59:55 +08:00
@likuku Memcache 算吗
likuku
2018-06-27 10:06:04 +08:00
@doufenger memcache 不算,它最多只能算优化加速 db 的。

那么,看来,用于加速 php 本身的加速器你统统都没装!当下,那就 opcache 吧,必经已经被吸收进 php 本身了,
兼容性,可靠性,和维护性都有保障了。这类东西都是拿内存换速度的,默认记得都是给它 16M 内存的,一般也够了。
开启后运行几天先看看,若服务器资源充足,可以适当多给它点内存。

很可能就是这个状况 “遇到过 php 太老,且没有开任何加速功能,让 php-fpm 处理请求很慢,
被稍微密集访问时,php-fpm 就忙不过来,持续高 CPU 占用。”
doufenger
2018-06-27 12:58:03 +08:00
@likuku 谢谢 已经开启了 今晚观察下高峰期如何

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

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

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

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

© 2021 V2EX