技术解析

为什么我的服务器 mysql 显示占 CPU 很高,改成远程数据库后,远程数据库的服务器的 mysql 进程完全不占 CPU?
0
2021-06-23 12:06:36
idczone

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

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

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


磁盘 IO 有检查过没

磁盘 IO 能够检查什么?

切回本地看看到底是哪条 SQL 占用长?测测本地连接与远程连接处理速率

先试试 iostat 看 avg-cpu

看 I/O wait percentage

原先是 php-fpm 和 mysql 都在同一台机? mysql 新旧机软硬件配置一样?


似乎 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

innotop

是的

开启 php status 监控 看看 php 被请求次数 看是否被攻击

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 程序,也是个好办法。

安装 opcache 在最后一步出现这个情况了 求助大佬

[[email&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

我的是 PHP 5.6 的

开了 Gzip On, Memcache On.
24 核的 CPU 平时 200-300 在线的时候负载才 二十多, 晚上到 400 了就负载 200-250 多。。频繁 502

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 出了足够的资料

差点忘记了,当前你的 php 5.6 没安装 /启用 任何加速器么? (eaccelerator, APC, opcache)

Memcache 算吗

memcache 不算,它最多只能算优化加速 db 的。
那么,看来,用于加速 php 本身的加速器你统统都没装!当下,那就 opcache 吧,必经已经被吸收进 php 本身了,
兼容性,可靠性,和维护性都有保障了。这类东西都是拿内存换速度的,默认记得都是给它 16M 内存的,一般也够了。
开启后运行几天先看看,若服务器资源充足,可以适当多给它点内存。
很可能就是这个状况 “遇到过 php 太老,且没有开任何加速功能,让 php-fpm 处理请求很慢,
被稍微密集访问时,php-fpm 就忙不过来,持续高 CPU 占用。”

谢谢 已经开启了 今晚观察下高峰期如何

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服