Python技巧
daphne+nginx+channels+redis 在Ubuntu 24.04布署流程
ubuntu24设置uwsgi和nginx开机自启动(设置并开启service)
如何在Ubuntu 24.04上使用uwsgi+django+Nginx来部署python3应用程序
开启nginx 开机自启动服务
网站建设
Nginx "buffered to a temporary file" 日志过多
CPU使用率过高,问题排查步骤
ubuntu 裸机安装相关包
sitemap.xml相关操作
项目更新时数据表迁移相关操作
ubuntu 防攻击,扫描相关的命令
ubuntu 运维相关的命令
DetailView 的自动机制
C盘清空指南
ubuntu 上的 Redis 配置
linux ubuntu centos 清理垃圾
在nginx 里 配置跨域访问控制
MYSQL数据库常用操作命令
将MYSQL数据库从一台服务器移植到另一台服务器
向Mysql插入Emoji表情时失败了,python代码报以下异常:InternalError: 1366
Centos7+nginx下为域名免费安装ssl证书
Centos7,Centos8防火墙相关的命令
Centos7.5+nginx布署python3+django WEB服务器
js/jQuery技巧
VPS推荐
在 Google Search Console(谷歌搜索控制台)相关操作
如何在 本地win11 安装 Rclone,并使用Rclone上传文件到Cloudflare
域名申请
111111
构建安卓APP
Android Studio 如何修改 Package Name
Android使用WebView将H5网站打包成apk,如何去掉标题,如何更换应用图标
Android使用WebView加载网站,无法上传图片的解决方法
CPU使用率过高,问题排查步骤
一,第一步:先看清楚到底是什么在吃CPU # 实时查看进程CPU占用排名 top -o %CPU # 或者更直观的 htop 重点关注: 1.有没有不认识的进程名(尤其是伪装成系统进程的,比如 kworkerds、systemdd、随机字符串命名的) 2.进程的用户是谁运行的(www-data正常,但如果是www-data运行了一个奇怪的二进制就要警惕) 3.进程路径是否在 /tmp、/var/tmp、/dev/shm 这种异常目录下 # 查看进程的实际可执行文件路径 ls -la /proc/<PID>/exe # 查看进程的命令行完整参数 cat /proc/<PID>/cmdline ps aux | grep <PID>
二,第二步:检查矿池连接(最常见的木马类型——挖矿) # 查看网络连接,重点看异常的外联IP和端口 netstat -tunlp # 或 ss -tunlp # 常见矿池端口:3333, 4444, 5555, 7777, 8080(伪装), 14444, 45700 等 第三步:检查定时任务(持久化常见手段) crontab -l crontab -u www-data -l cat /etc/crontab ls -la /etc/cron.d/ ls -la /etc/cron.daily/ /etc/cron.hourly/ 第四步:检查启动持久化项 systemctl list-units --type=service --state=running ls -la /etc/systemd/system/ ls -la ~/.config/systemd/user/ 2>/dev/null 第五步:检查SSH是否被加了后门 cat ~/.ssh/authorized_keys cat /root/.ssh/authorized_keys # 看有没有你不认识的公钥 第七步:检查Nginx/Django层面是否被人通过Web漏洞执行了命令 既然你跑的是Django+Nginx,重点排查:检查nginx访问日志是否有异常的POST请求到静态资源、上传接口、或者陌生路径 tail -n 500 /var/log/nginx/access.log | grep -E "POST|\.php|wp-|eval|base64" # 检查 Django media/static 目录里有没有被人上传了 .py 或可执行脚本 find /path/to/your/project/media -type f \( -name "*.py" -o -name "*.sh" -o -name "*.php" \)
三,CPU占用:mysqld 才是真正的"大户" 1646 mysql 39.7%CPU 140209:56 TIME+ mysqld 840581 root 11.3%CPU 127:25.63 uwsgi 840582 root 3.7%CPU 95:22.40 uwsgi 进一步确认彻底放心,可以顺手看一眼: crontab -l crontab -u www-data -l netstat -tunlp | grep -v "127.0.0.1\|:3306\|:6379\|:80\|:443" 如果这几项也都没有异常连接(尤其是没有连向陌生境外IP的常驻连接),那就可以完全排除了。 逐项确认: crontab -l 无内容:没有定时任务持久化木马 www-data用户不存在:说明你这台是CentOS/RHEL系系统(用nginx用户而非www-data跑uwsgi/nginx),这是正常的,不是异常 netstat 监听端口:只有 9098、2025(你自己的uwsgi应用端口)、22(SSH)、323(chronyd时间同步,系统自带)——没有任何陌生端口在监听,没有矿池连接,没有反弹shell常用的诡异端口
四,mysql -u root -p'你的密码' -e "SHOW FULL PROCESSLIST;" SELECT COUNT(*) FROM shoulu_first_visit; SELECT COUNT(*) FROM shoulu_click_total; SELECT COUNT(*) FROM shoulu_out_click; SHOW INDEX FROM shoulu_first_visit; SHOW INDEX FROM shoulu_click_total; SHOW INDEX FROM shoulu_out_click; 给 shoulu_first_visit 表加索引 mysql>ALTER TABLE shoulu_first_visit ADD INDEX idx_ip_day (user_ip, Everyday); OPTIMIZE TABLE shoulu_first_visit; mysql> EXPLAIN SELECT 1 FROM shoulu_first_visit -> WHERE user_ip = '1.2.3.4' AND Everyday = '2026-06-24' LIMIT 1;
五, 长期建议:把"每月手动清理"换成自动化 你这套来路统计的表,本质上一直在无限增长,建议加个每天/每周自动跑的cron定时清理任务,避免再出现"44天没清,表涨到140万行影响性能"这种情况复发: # 创建一个专门的MySQL配置文件,权限设为只有root能读 cat > /root/.cron_mysql.cnf << 'EOF' [client] user=root password="你的密码" EOF # 设置 .cron_mysql.cnf为只有root 用户才可读 chmod 600 /root/.cron_mysql.cnf # 验证密码正确性 mysql --defaults-extra-file=/root/.cron_mysql.cnf -e "SELECT 1;" 如果 SELECT 1; 能正常返回结果(没有 Access denied 报错),就说明密码和引号都写对了。
六,crontab -e # 每天凌晨3点自动清理30天前的数据 0 3 * * * mysql --defaults-extra-file=/root/.cron_mysql.cnf -e "DELETE FROM collect_click_total WHERE Everyday < DATE_SUB(CURDATE(), INTERVAL 8 DAY); DELETE FROM collect_first_visit WHERE Everyday < DATE_SUB(CURDATE(), INTERVAL 8 DAY); DELETE FROM collect_out_click WHERE day < DATE_SUB(CURDATE(), INTERVAL 8 DAY); DELETE FROM collect_daynumber WHERE day < DATE_SUB(CURDATE(), INTERVAL 8 DAY);" >> /var/log/mysql_cleanup.log 2>&1 # 每天凌晨6点自动清理30天前的数据 0 6 * * * mysql --defaults-extra-file=/root/.cron_mysql.cnf -e "DELETE FROM shoulu_click_total WHERE Everyday < DATE_SUB(CURDATE(), INTERVAL 8 DAY); DELETE FROM shoulu_first_visit WHERE Everyday < DATE_SUB(CURDATE(), INTERVAL 8 DAY); DELETE FROM shoulu_out_click WHERE day < DATE_SUB(CURDATE(), INTERVAL 8 DAY); DELETE FROM shoulu_daynumber WHERE day < DATE_SUB(CURDATE(), INTERVAL 8 DAY);" >> /var/log/mysql_cleanup.log 2>&1
删除文章
展示文章
友情链接
2026.6.8