V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
通过以下 Referral 链接购买 DigitalOcean 主机,你将可以帮助 V2EX 持续发展
DigitalOcean - SSD Cloud Servers
1dian01
V2EX  ›  VPS

求解破案思路,阿里云 2cpu1g 的 vps,隔几天来个 cpu 占用 100%

  •  
  •   1dian01 · 2023-09-15 10:13:43 +08:00 · 1503 次点击
    这是一个创建于 469 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ubuntu 装的宝塔,WordPress ,frp ,cpu 占用 100%时网站宕机,ssh 也连不上去,所以没办法 top 看是哪个进程的问题,一般几分钟到几个小时自己会恢复,或者重启可以马上恢复,求解破案思路
    17 条回复    2023-09-16 19:50:39 +08:00
    tunggt
        1
    tunggt  
       2023-09-15 13:07:40 +08:00
    看看是不是数据库的问题,
    另外你 WordPress 大概多少文章?有无安装其他插件?
    dctxf
        2
    dctxf  
       2023-09-15 13:47:22 +08:00
    我的也是,我怀疑是带宽占满或者内存占满,一般我都会过段时间清空一下。要玩还是买国外服务器吧
    andypp
        3
    andypp  
       2023-09-15 14:58:19 +08:00 via Android
    我也。感觉太 low 了,动不动就需要重启
    opengps
        4
    opengps  
       2023-09-15 15:00:15 +08:00
    从阿里云网页看下,cpu 满载的时间点,看看有没有什么特征(这一步主要是为了找那种定时任务类的进程)
    wonderfulcxm
        5
    wonderfulcxm  
       2023-09-15 15:03:31 +08:00
    思路就是先看日志,看看 nginx/apache/php-fpm/mysql 的日志
    opengps
        6
    opengps  
       2023-09-15 15:05:21 +08:00
    对了,第二个办法是,对于连续运行的进程,看累计 cpu 消耗量,从这个角度排队逐个检查
    JayZXu
        7
    JayZXu  
       2023-09-15 17:15:59 +08:00
    是不是内存满了?我腾讯云的轻量就是内存一满,CPU 就满载卡死
    cxh116
        8
    cxh116  
       2023-09-15 17:41:54 +08:00 via Android
    运行 dmesg 命令,看有没有 OOM killer 信息
    northbrunv
        9
    northbrunv  
       2023-09-15 18:04:40 +08:00
    换 ryzen 、epyc 提高性能
    1dian01
        10
    1dian01  
    OP
       2023-09-15 21:43:36 +08:00
    @wonderfulcxm 宕机前 5 分钟有这样一段慢日志,没看懂,可否帮忙看看,谢谢

    # Time: 230915 9:07:00
    # User@Host: root[root] @ localhost []
    # Query_time: 3.579496 Lock_time: 0.000057 Rows_sent: 723 Rows_examined: 739
    use xxxxxxoxg;
    SET timestamp=1694740020;
    SELECT option_name, option_value FROM bbb_options WHERE autoload = ' yes ';
    # Time: 230915 9:08:02
    # User@Host: root[root] @ localhost []
    # Query_time: 4.918583 Lock_time: 0.072429 Rows_sent: 723 Rows_examined: 739
    SET timestamp=1694740082;
    SELECT option_name, option_value FROM bbb_options WHERE autoload = ' yes ';
    # Time: 230915 9:08:50
    # User@Host: root[root] @ localhost []
    # Query_time: 5.088697 Lock_time: 0.000032 Rows_sent: 723 Rows_examined: 739
    SET timestamp=1694740130;
    SELECT option_name, option_value FROM bbb_options WHERE autoload = ' yes ';
    # Time: 230915 9:09:45
    # User@Host: root[root] @ localhost []
    # Query_time: 4.839372 Lock_time: 0.009142 Rows_sent: 723 Rows_examined: 739
    SET timestamp=1694740185;
    SELECT option_name, option_value FROM bbb_options WHERE autoload = ' yes ';
    /www/server/mysql/bin/mysqld, Version: 5.5.62-log (Source distribution). started with:
    Tcp port: 3306 Unix socket: /tmp/mysql.sock
    Time Id Command Argument
    1dian01
        11
    1dian01  
    OP
       2023-09-15 22:00:50 +08:00
    @cxh116 感谢,直接 ssh 上去,运行的 dmesg 命令,出来了一堆信息,搜索没有 OOM ,估计不是内存爆了
    wonderfulcxm
        12
    wonderfulcxm  
       2023-09-16 14:24:03 +08:00 via iPhone
    @1dian01 这个 WordPress 加载 option 表配置的查询,相当注册表。你可以给它加上索引优化。

    alter table bbb_options add index autoload_idx(`autoload`);

    极端情况下可以导致 CPU200%占用,系统负载 3-6 ,新版的 wp 据说已经加上了索引。不知道你的 wp 版本是多少。这里有相关讨论: https://wordpress.stackexchange.com/questions/98284/how-come-wp-options-table-does-not-have-an-index-on-autoload/98287#98287



    另外,有些插件或主题也会缓存数据这个表里,日趋庞大,就是以_transient 开头的项目,长期不用可以清除一下这些数据。
    DELETE FROM bbb_options WHERE option_name REGEXP '_transient_'
    wonderfulcxm
        13
    wonderfulcxm  
       2023-09-16 14:27:24 +08:00 via iPhone
    不过这个慢查询也可能是资源不足导致的后果而不是导致卡死的原因。看一下那段时间的网络请求数目和流量情况。流量在 vps 服务商应该都有。
    1dian01
        14
    1dian01  
    OP
       2023-09-16 15:43:35 +08:00
    @wonderfulcxm
    这个时间点 ECS 同时连接数有个峰值为 123 ,9 点 6 分开始的,持续 3 分钟,带宽还好,没有特别大的峰值,另外有一堆这样的日志,应该是被扫了,是不是我 vps 太弱了,这么一扫就能爆,有没有啥办法屏蔽一下这些扫描机器人

    125.36.255.55 - - [15/Sep/2023:09:06:47 +0800] " GET /52hacker.asp HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    110.177.179.164 - - [15/Sep/2023:09:06:47 +0800] " GET /junior.htm HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    119.48.134.74 - - [15/Sep/2023:09:06:47 +0800] " GET /HACKED.html HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    123.245.25.51 - - [15/Sep/2023:09:06:47 +0800] " GET /hackway.asp HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    124.31.107.168 - - [15/Sep/2023:09:06:47 +0800] " GET /myup2.asp HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    122.96.28.64 - - [15/Sep/2023:09:06:47 +0800] " GET /king.txt HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    58.19.57.155 - - [15/Sep/2023:09:06:47 +0800] " GET /gddff.asp HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    43.248.108.195 - - [15/Sep/2023:09:06:47 +0800] " GET /hacker.php HTTP/1.1 " 404 162 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    139.170.203.51 - - [15/Sep/2023:09:06:47 +0800] " GET /net.asp HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    124.117.193.3 - - [15/Sep/2023:09:06:47 +0800] " GET /jza.htm HTTP/1.1 " 499 0 "-" " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 "
    wonderfulcxm
        15
    wonderfulcxm  
       2023-09-16 16:03:41 +08:00 via iPhone
    @1dian01 可以在 apache/nginx 按 ua 屏蔽这些请求。让它们无法到达 php 和 mysql 处理的阶段,它们的特征很明显,IP 虽然有很多,但 ua 的 keyword 就是 Firefox/7.0.1 ,根据这个写规则来屏蔽。(应该没人用这么老旧的浏览器了,只能是爬虫)

    如果觉得不够,还可以装上 WordPress 的一些 WAF 插件,就是应用防火墙。比如 Wordfence 。
    1dian01
        16
    1dian01  
    OP
       2023-09-16 17:55:40 +08:00
    @wonderfulcxm 感谢
    1dian01
        17
    1dian01  
    OP
       2023-09-16 19:50:39 +08:00
    @wonderfulcxm hi ,朋友,在网上找了一段代码,我是 nginx 服务器,帮忙看看是否 ok ,感谢

    ```

    #禁止 Scrapy 等工具的抓取
    if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
    return 403;
    }
    #禁止指定 UA
    if ($http_user_agent ~* "Firefox/7.0.1")
    {
    return 403;
    }
    #禁止非 GET|HEAD|POST 方式的抓取
    if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
    }

    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2738 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:07 · PVG 10:07 · LAX 18:07 · JFK 21:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.