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

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

  •  
  •   doufenger · 2018-06-25 20:16:25 +08:00 · 3845 次点击
    这是一个创建于 2336 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2018-06-28 10:02:13 +08:00
    感谢各位大大的指导,开启 opcache 后情况好很多了
    19 条回复    2018-06-27 12:58:03 +08:00
    hand515
        1
    hand515  
       2018-06-25 20:19:49 +08:00
    磁盘 IO 有检查过没
    doufenger
        2
    doufenger  
    OP
       2018-06-25 20:22:37 +08:00
    @hand515 磁盘 IO 能够检查什么?
    R18
        3
    R18  
       2018-06-25 20:27:37 +08:00 via Android
    切回本地看看到底是哪条 SQL 占用长?测测本地连接与远程连接处理速率
    hand515
        4
    hand515  
       2018-06-25 20:27:39 +08:00
    先试试 iostat 看 avg-cpu
    feverzsj
        5
    feverzsj  
       2018-06-25 20:30:08 +08:00
    看 I/O wait percentage
    likuku
        6
    likuku  
       2018-06-25 20:48:12 +08:00
    原先是 php-fpm 和 mysql 都在同一台机? mysql 新旧机软硬件配置一样?
    doufenger
        7
    doufenger  
    OP
       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
        8
    thread2  
       2018-06-25 20:53:21 +08:00 via Android
    innotop
    doufenger
        9
    doufenger  
    OP
       2018-06-25 21:57:28 +08:00
    @likuku 是的
    a7a2
        10
    a7a2  
       2018-06-25 22:52:47 +08:00
    开启 php status 监控 看看 php 被请求次数 看是否被攻击
    likuku
        11
    likuku  
       2018-06-25 22:53:35 +08:00   ❤️ 2
    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
        12
    doufenger  
    OP
       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
        13
    doufenger  
    OP
       2018-06-26 10:32:13 +08:00
    我的是 PHP 5.6 的
    doufenger
        14
    doufenger  
    OP
       2018-06-26 10:54:19 +08:00
    开了 Gzip On, Memcache On.
    24 核的 CPU 平时 200-300 在线的时候负载才 二十多, 晚上到 400 了就负载 200-250 多。。频繁 502
    likuku
        15
    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
        16
    likuku  
       2018-06-26 11:09:32 +08:00
    差点忘记了,当前你的 php 5.6 没安装 /启用 任何加速器么? (eaccelerator, APC, opcache)
    doufenger
        17
    doufenger  
    OP
       2018-06-26 22:59:55 +08:00
    @likuku Memcache 算吗
    likuku
        18
    likuku  
       2018-06-27 10:06:04 +08:00
    @doufenger memcache 不算,它最多只能算优化加速 db 的。

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

    很可能就是这个状况 “遇到过 php 太老,且没有开任何加速功能,让 php-fpm 处理请求很慢,
    被稍微密集访问时,php-fpm 就忙不过来,持续高 CPU 占用。”
    doufenger
        19
    doufenger  
    OP
       2018-06-27 12:58:03 +08:00
    @likuku 谢谢 已经开启了 今晚观察下高峰期如何
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2884 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:48 · PVG 21:48 · LAX 05:48 · JFK 08:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.