Ubuntu服务器高负载排查求助:CPU占用极高但Google Analytics无流量
看了你的top输出,确实有点反常——CPU直接拉满(90%都在用户态),一堆php-fpm8.1进程在疯狂跑,但Google Analytics却没记录到流量。给你几个接地气的排查方向,一步步来揪出问题:
先查Web服务器访问日志,看透所有请求
GA是前端埋点,像爬虫、API接口请求、内网访问、或者没加载GA脚本的页面请求,都不会被GA统计,但这些请求都会实打实让php-fpm干活。直接去看Nginx/Apache的访问日志(比如Nginx的/var/log/nginx/access.log,Apache的/var/log/apache2/access.log),里面能看到所有请求的IP、路径、状态码,一眼就能知道是不是有大量未被GA统计的请求在消耗资源。统计异常IP,排查爬虫/恶意扫描
如果日志里有大量重复IP的请求,大概率是爬虫或者暴力扫描。可以用这个命令快速统计IP请求次数:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr排名靠前的IP如果请求量极大,基本就是问题来源,后续可以用防火墙规则封禁。
检查php-fpm的连接和进程状态
用ss -tulnp | grep php-fpm或者netstat -anp | grep php-fpm,看看php-fpm进程连接的客户端IP和端口,确认这些请求是来自公网、内网还是本地。另外也可以用ps aux | grep php-fpm | wc -l统计当前php-fpm的总进程数,对比你php-fpm配置(比如/etc/php/8.1/fpm/pool.d/www.conf)里的pm.max_children参数,看看是不是进程数超标导致CPU争抢。排查MySQL的负载瓶颈
你的mariadbd进程CPU占用也达到了32.6%,很可能php-fpm进程都在等数据库返回结果。可以用mysqladmin -u root -p processlist查看当前数据库的活跃查询,有没有慢查询、锁表或者批量数据操作拖慢了整个服务,必要时开启慢查询日志(slow_query_log = 1)记录耗时久的查询。追踪单个高CPU的php-fpm进程
挑一个CPU占比较高的php-fpm PID(比如top里的29075),用strace -p 29075追踪它的系统调用,看看它到底在做什么——是在读写文件、访问数据库,还是在进行网络通信,这能精准定位到进程的具体操作。检查内部定时任务
看看有没有用户级或系统级的定时任务在后台跑,比如crontab -l查看当前用户的cron任务,ls /etc/cron.d/、cat /etc/crontab查看系统级任务,说不定是某个批量处理数据的脚本调用了PHP,导致php-fpm进程激增。
先从访问日志入手最直接,毕竟GA看不到的请求全藏在日志里,大概率能快速找到根源!
备注:内容来源于stack exchange,提问作者Crypto Coupons

