2026-06-28 13:21:31
之前整理了一期 Magento 服务器负载居高不下问题排除,没想到观察了几天发现服务器负载依然居高不下。
最终靠着 cloudflare 中设置访问规则,屏蔽了大量恶意爬虫,服务器负载终于恢复正常。
这里记录一下排除过程。特别是其中的 MySQL / MariaDB 相关的排查过程很有参考价值。
在重建了 Magento 索引之后,没想到 MySQL 的 CPU 占用依旧很高,导致服务器负载居高不下。
我本以为是系统交换分区(swap)导致的高负载问题,查看了系统的 swap 使用情况,发现 swap 使用率很低,几乎没有使用到 swap 分区。
$ free -h
total used free shared buff/cache available
Mem: 7.7Gi 1.0Gi 6.5Gi 5.7Mi 363Mi 6.7Gi
Swap: 2.0Gi 0B 2.0Gi
以上是我本机的内存使用情况,并非服务器的,仅仅是为了说明 swap 使用率很低,几乎没有使用到 swap 分区。
这里的 available 内存是指系统可用的内存,free 内存是指系统空闲的内存,buff/cache 是指系统缓存的内存。总的来说,系统内存使用情况良好,没有出现内存不足的情况。
如果想看具体每个进程的 SWAP 分区使用情况,可以使用 smem 工具,安装方法如下:
sudo apt install smem
查看每个进程的 SWAP 分区使用情况:
$ sudo smem -t -k -s uss -r | head -25
PID User Command Swap USS PSS RSS
280 mysql /usr/sbin/mysqld 0 401.6M 403.6M 410.8M
308 root /usr/bin/dockerd -H fd:// - 0 78.8M 78.9M 81.9M
211 root /usr/bin/containerd 0 48.1M 48.1M 49.5M
179 root /usr/libexec/wsl-pro-servic 0 16.0M 16.0M 17.5M
166 redis /usr/bin/redis-server 127.0 0 13.0M 14.1M 20.3M
164 root php-fpm: master process (/e 0 11.2M 17.5M 34.2M
上面命令是查看 USS 占用排名前 25 的进程,USS 是指进程独占的内存大小,PSS 是指进程共享的内存大小,RSS 是指进程实际使用的物理内存大小。
在 MySQL 中使用 show processlist 命令查看当前正在执行的 SQL 语句,发现没有明显的异常。
已经看不到满查询的情况了。之前没有建 magento 索引的时候,show processlist 中还会偶有慢查询,
但是现在已经没有了。大部分的 SQL 语句都是正常的查询语句,没有出现任何慢查询。
那为何从 top 命令看 MySQL 占用这么高的 CPU 呢?注意面试的时候,一定要说用了 top,否则一些脑残面试官,以为你啥也不知道。。。
于是我怀疑是 MySQL 每秒的 SQL 执行量过高,导致 CPU 占用过高。
]> SHOW GLOBAL STATUS LIKE 'Questions';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| Questions | 705205 |
+---------------+--------+
1 row in set (0.00 sec)
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Questions';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| Questions | 715310 |
+---------------+--------+
1 row in set (0.00 sec)
大概间隔了 5 秒钟左右,发现 Questions 的值增加了 10000 左右,说明 MySQL 每秒的 SQL 执行量大约是 2000 左右。
但是,这种纯手工计时的方式太不精确,于是改用 watch 命令来查看 MySQL 每秒的 SQL 执行量。
watch -n 10 'mysqladmin -uroot -ppassword status | grep Questions'
watch 命令每隔 10 秒钟执行一次 mysqladmin 命令,查看 MySQL 的状态信息,并过滤出 Questions 这一行。
同时计算出每秒的 SQL 执行量,发现 MySQL 每秒的 SQL 执行量大约是 1500 左右。🥲
这也太离谱了,MySQL 每秒的 SQL 执行量居然这么高,难怪 CPU 占用会这么高。
因为之前看过 cloudflare 及 Nginx 的访问日志,从日志看,请求量也就在每秒 20 次左右。
这个访问量很小,我一直没有当回事。确实是我大意了。
再次仔细看了一下 Nginx 日志,发现这每秒 20 次的请求,实际应该是同一来源。因为 User Agent 类似。
而且都是访问的 Magento 的产品列表页的属性过滤功能,但是属性参数每次都不一样。
这个网站 170 万多个产品,100 多属性,属性组合非常多,导致恶意爬虫在抓取产品列表页的时候,访问了大量的不同属性组合的 URL。
我怀疑是这个属性列表页的属性组合导致了 MySQL 每秒的 SQL 执行量过高,最终导致 MySQL CPU 占用过高。
而这个我又没法做本地缓存,因为磁盘空间不太够。
所以,先临时启用了 cloudflare 的访问规则,除了认证的正规爬虫(如 Googlebot、Bingbot 等)之外,其他的所有请求都开启人类验证(Challenge)模式。
但是,需要排除首页,毕竟需要防止宕机监控请求也被挑战。
尝试了一下只部分属性列表路径才开启挑战,但是发现相关的页面规则太多,最终还是选择了对所有路径开启挑战模式。
暂时看是正常了。系统负载也恢复正常了。
2026-06-28 12:10:47
https://doc.ruoyi.vip/ruoyi-vue/
http://vue.ruoyi.vip/system/config
参考 https://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html#%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C
到 https://gitee.com/y_project/RuoYi-Vue 下载压缩包,即 release 页面的 zip 压缩包。到本地解压即可。
搜索文件 RuoYiApplication.java,点击启动即可。其路径是:
ruoyi-admin\src\main\java\com\ruoyi\RuoYiApplication.java
修改完成后,重启 idea 中的服务即可。
进入前端目录 ruoyi-ui,先安装依赖
npm install --registry=https://registry.npmmirror.com
然后执行:
npm run dev
即可。执行完成后,会自动打开浏览器显示前端登录界面。
如果后台服务运行正常,就能登陆成功了。
2026-06-24 19:09:29
在编译 RuoYi (Sprint Boot 版本) RuoYiApplication.java 时,报错找不到 oracle 及 sqlserver 的依赖库。
或者在 IDEA 右侧的 Maven 中点击 Reload All Maven Projects 也会报错。
Could not find artifact com.oracle:ojdbc8:pom:12.2.0.1 in central (https://repo.maven.apache.org/maven2)
及
Could not find artifact com.microsoft.sqlserver:sqljdbc4:pom:4.0.0 in central (https://repo.maven.apache.org/maven2)
Oracle ojdbc8 12.2.0.1的禁止是由于它的许可证限制造成的。根据Oracle的许可条款,Oracle数据库的JDBC驱动程序不允许被存储在公共的Maven仓库中。
可以手动下载驱动程序 jar 文件安装到您的本地 Maven 仓库中。
下载地址:
https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/12.2.0.1/
将 ojdbc8-12.2.0.1.jar 文件下载到本地,然后通过命令行进入下载目录,执行以下命令将其安装到本地 Maven 仓库中:
mvn install:install-file -Dfile=ojdbc8-12.2.0.1.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
主要下载后,需要点击浏览器的保留按钮,否则 jar 包默认不会以原文件名的方式保存到本地。
微软不允许以maven的方式下载该文件。
下载地址:
https://mvnrepository.com/artifact/com.microsoft.sqlserver/sqljdbc4/4.0
找到 FILES 部分的 jar,下载到本地。到下载目录执行命令:
mvn install:install-file -Dfile=sqljdbc4-4.0.0.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0.0 -Dpackaging=jar
2026-06-23 21:48:40
上上周遇到的一个 Magento 服务器问题。
服务器负载居高不下,MySQL 数据库 CPU 占用很高,从 show processlist 的结果看,看不出什么问题。但是通过统计执行的 SQL 总量看,每秒钟几千个 SQL 查询。而且偶尔有执行长时间的大型联表查询语句。而产品表有近两百万的数据量。
经过一顿毫无头绪的排除。大概定位到是 magento 索引失效的问题,需要重建索引。
但是,重建命令,看不到进度,第一次执行,不知道为什么失败了。于是尝试,逐个手动重建索引。
sudo lnmp php-fpm stop
主要是为了防止请求进来,继续造成系统高负载。
重建后再启动
sudo lnmp php-fpm start
以产品跟属性的索引为例:
php bin/magento indexer:reindex catalog_product_attribute -vvv
也可以一次性执行多个:
$ php bin/magento indexer:reindex catalogrule_product catalogrule_rule catalog_category_product customer_grid design_config_grid inventory catalog_product_category cataloginventory_stock -vvv
执行结果
Design Config Grid index has been rebuilt successfully in 00:00:00
Customer Grid index has been rebuilt successfully in 00:00:00
Category Products index has been rebuilt successfully in 00:21:15
Product Categories index has been rebuilt successfully in 00:00:00
Catalog Rule Product index has been rebuilt successfully in 00:00:00
Stock index has been rebuilt successfully in 00:01:59
Inventory index has been rebuilt successfully in 00:00:00
Catalog Product Rule index has been rebuilt successfully in 00:00:00
Product Price index has been rebuilt successfully in 00:21:29
Catalog Search index has been rebuilt successfully in 01:14:03
那个 catalog_product_attribute Product EAV 执行时间最长,执行了三四天。所以最好在 screen 中执行。
$ php bin/magento indexer:status
+---------------------------+----------------------+--------+-----------+---------------------+---------------------+
| ID | Title | Status | Update On | Schedule Status | Schedule Updated |
+---------------------------+----------------------+--------+-----------+---------------------+---------------------+
| catalogrule_product | Catalog Product Rule | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| catalogrule_rule | Catalog Rule Product | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| catalogsearch_fulltext | Catalog Search | Ready | Schedule | idle (0 in backlog) | 2026-06-14 14:02:10 |
| catalog_category_product | Category Products | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| customer_grid | Customer Grid | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| design_config_grid | Design Config Grid | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| inventory | Inventory | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| catalog_product_category | Product Categories | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
| catalog_product_attribute | Product EAV | Ready | Schedule | idle (0 in backlog) | 2026-06-22 10:09:25 |
| catalog_product_price | Product Price | Ready | Schedule | idle (0 in backlog) | 2026-06-14 12:44:58 |
| cataloginventory_stock | Stock | Ready | Schedule | idle (0 in backlog) | 2026-06-14 09:28:02 |
+---------------------------+----------------------+--------+-----------+---------------------+---------------------+
重建索引后,系统负载确实明显降了下来。
排查的细节后续补充一下,今晚安装 RuoYi Vue 的环境,折腾了一晚上,明天要早起,先睡了。
2026-06-19 22:51:07
今天在进行七牛 CDN 域名免费 SSL 证书续期时,发现不能直接续费了。会报错:
[400600] 前置订单未完成,请稍后重试
这个提示也太抽象了,咱能做个正常点的提示吗?
看了一下文档:
https://developer.qiniu.com/fusion/3905/ssl-certificate-faq
Q8: 免费证书到期后,续费报错:[400600] 前置订单未完成,请稍后重试点击查看 ,如何处理?
免费证书到期后,不需要续费,您重新申请购买新的免费证书即可。
Q7: 证书到期了可以自动续费吗?
证书到期现在不支持自动续费,需要重新购买新的证书,完成验证,证书签发后部署到CDN进行替换即可。
真是折腾,操作越来越麻烦。只能新建一个免费的证书了。
2026-06-18 07:06:55
入厂培训的第三日,主要学习了厂规厂纪,及安全生产相关的规范。确实做的比较细致,而且各种真实案例。看来平时总结到位,且每次事故都有复盘和原因分析,这个难能可贵。至少比上家公司天天鼓吹自己管理先进,实则从来没有深入一线进行经验总结,都是假大空的战略规划。
每堂课都有一张笔答的试卷。这个形式很有效,可以避免培训课程变成走过场,而且手写一遍会加深记忆。类似于我记录笔记的过程。最后答完试题后,每张试题我都拍照留念,以备后续复习😅。
员工手册翻了一遍,学到了不少。
在轮胎行业,PCR 和 TBR 是两种最重要的轮胎分类,分别代表乘用车轮胎和商用车轮胎。
在轮胎术语中,Radial(子午线)指的是一种轮胎内部帘布层的结构方式。你可以把它理解为轮胎的“骨架”排列技术。
相比老式的“斜交轮胎(Bias)”:
比如轮胎规格 205/55R16 里的“R”,就是指这条轮胎是“子午线结构”。现在市面上98%以上的轿车和卡车轮胎都是这种结构。😊
BPM 指的是 Business Process Management(业务流程管理)。
简单来说,它是一套软件系统,专门用来把公司的各种审批(如请假、报销、采购)搬到线上,实现自动化流转。你可以把它想象成一个“数字交通指挥官”:
市面上常见的钉钉审批、企业微信等,底层核心都是BPM引擎在工作。