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

2023-09-15 10:13:43 +08:00
 1dian01
ubuntu 装的宝塔,WordPress ,frp ,cpu 占用 100%时网站宕机,ssh 也连不上去,所以没办法 top 看是哪个进程的问题,一般几分钟到几个小时自己会恢复,或者重启可以马上恢复,求解破案思路
1438 次点击
所在节点    VPS
17 条回复
tunggt
2023-09-15 13:07:40 +08:00
看看是不是数据库的问题,
另外你 WordPress 大概多少文章?有无安装其他插件?
dctxf
2023-09-15 13:47:22 +08:00
我的也是,我怀疑是带宽占满或者内存占满,一般我都会过段时间清空一下。要玩还是买国外服务器吧
andypp
2023-09-15 14:58:19 +08:00
我也。感觉太 low 了,动不动就需要重启
opengps
2023-09-15 15:00:15 +08:00
从阿里云网页看下,cpu 满载的时间点,看看有没有什么特征(这一步主要是为了找那种定时任务类的进程)
wonderfulcxm
2023-09-15 15:03:31 +08:00
思路就是先看日志,看看 nginx/apache/php-fpm/mysql 的日志
opengps
2023-09-15 15:05:21 +08:00
对了,第二个办法是,对于连续运行的进程,看累计 cpu 消耗量,从这个角度排队逐个检查
JayZXu
2023-09-15 17:15:59 +08:00
是不是内存满了?我腾讯云的轻量就是内存一满,CPU 就满载卡死
cxh116
2023-09-15 17:41:54 +08:00
运行 dmesg 命令,看有没有 OOM killer 信息
northbrunv
2023-09-15 18:04:40 +08:00
换 ryzen 、epyc 提高性能
1dian01
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
2023-09-15 22:00:50 +08:00
@cxh116 感谢,直接 ssh 上去,运行的 dmesg 命令,出来了一堆信息,搜索没有 OOM ,估计不是内存爆了
wonderfulcxm
2023-09-16 14:24:03 +08:00
@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
2023-09-16 14:27:24 +08:00
不过这个慢查询也可能是资源不足导致的后果而不是导致卡死的原因。看一下那段时间的网络请求数目和流量情况。流量在 vps 服务商应该都有。
1dian01
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
2023-09-16 16:03:41 +08:00
@1dian01 可以在 apache/nginx 按 ua 屏蔽这些请求。让它们无法到达 php 和 mysql 处理的阶段,它们的特征很明显,IP 虽然有很多,但 ua 的 keyword 就是 Firefox/7.0.1 ,根据这个写规则来屏蔽。(应该没人用这么老旧的浏览器了,只能是爬虫)

如果觉得不够,还可以装上 WordPress 的一些 WAF 插件,就是应用防火墙。比如 Wordfence 。
1dian01
2023-09-16 17:55:40 +08:00
@wonderfulcxm 感谢
1dian01
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;
}

```

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

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

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

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

© 2021 V2EX