本文目录导读:

我来为您提供一个高负载进程自动定位的Shell脚本方案,这个脚本可以自动检测系统负载并定位高消耗进程。
基础版高负载进程定位脚本
#!/bin/bash
# 高负载进程定位脚本
# 通过CPU、内存、I/O等多维度检测高负载进程
# 头部信息
echo "=========================================="
echo " 系统负载监控脚本 - $(date)"
echo "=========================================="
# 1. 系统负载概览
echo -e "\n[系统负载信息]"
uptime
echo ""
# 2. Top CPU消耗进程
echo "[Top 10 CPU消耗进程]"
ps aux --sort=-%cpu | head -11
echo ""
# 3. Top 内存消耗进程
echo "[Top 10 内存消耗进程]"
ps aux --sort=-%mem | head -11
echo ""
# 4. 检查高负载线程
echo "[高CPU使用率的线程]"
top -b -n1 -H | grep -E "^\s*[0-9]+" | sort -k9 -rn | head -10
echo ""
# 5. 分析进程详细信息
echo "[潜在问题进程分析]"
high_load_processes() {
# 检查CPU使用率超过50%的进程
ps aux | awk '$3 > 50.0 {print $0}'
}
high_load_processes | while read line; do
if [ ! -z "$line" ]; then
echo "高负载进程: $line"
pid=$(echo $line | awk '{print $2}')
echo "进程详细信息:"
ls -la /proc/$pid/exe 2>/dev/null
cat /proc/$pid/cmdline 2>/dev/null | tr '\0' ' '
echo ""
fi
done
# 6. 检测僵尸进程
echo "[僵尸进程检测]"
zombie_count=$(ps aux | awk '{print $8}' | grep -c "Z")
if [ $zombie_count -gt 0 ]; then
echo "发现 $zombie_count 个僵尸进程"
ps aux | awk '$8 ~ /Z/ {print "PID: "$2" 状态: "$8" 命令: "$11}'
else
echo "未发现僵尸进程"
fi
# 7. I/O wait分析
echo -e "\n[磁盘I/O分析]"
if command -v iostat &> /dev/null; then
iostat -x 1 2 | tail -5
else
echo "iostat未安装,请安装sysstat包"
fi
# 8. 网络连接分析
echo -e "\n[网络连接统计]"
netstat -an | grep -c "ESTABLISHED"
echo "当前建立的连接数"
# 9. 监控建议
echo -e "\n[监控建议]"
echo "----------------------------------------"
echo "1. 检查占用资源最高的进程是否需要优化"
echo "2. 考虑是否需要增加系统资源"
echo "3. 查看应用日志定位具体问题"
echo "4. 检查是否存在内存泄漏"
echo "5. 考虑负载均衡"
增强版自动化监控脚本
#!/bin/bash
# 配置部分
ALERT_CPU=80 # CPU告警阈值(%)
ALERT_MEM=90 # 内存告警阈值(%)
ALERT_LOAD=5 # 负载告警阈值
LOG_FILE="/var/log/high_load_monitor.log"
INTERVAL=5 # 检测间隔(秒)
# 函数:记录日志
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# 函数:获取系统负载
get_system_load() {
uptime | awk -F'load average:' '{print $2}' | awk -F',' '{print $1}'
}
# 函数:定位高负载进程
find_high_load_processes() {
local load=$(get_system_load)
# 系统负载分析
log_message "当前系统负载: $load"
# 检查CPU使用率
ps aux --sort=-%cpu | awk 'NR>1 && $3 > '$ALERT_CPU' {
printf("高CPU进程 - PID: %s, CPU: %s%%, 命令: %s\n", $2, $3, $11)
system("ps -p " $2 " -o pid,ppid,user,pcpu,pmem,etime,cmd --no-headers")
}'
# 检查内存使用率
ps aux --sort=-%mem | awk 'NR>1 && $4 > '$ALERT_MEM' {
printf("高内存进程 - PID: %s, MEM: %s%%, 命令: %s\n", $2, $4, $11)
}'
}
# 函数:深度分析进程
deep_process_analysis() {
local pid=$1
echo "=== 进程 $pid 深度分析 ==="
# 进程基本信息
echo "进程名称: $(cat /proc/$pid/comm 2>/dev/null)"
echo "父进程ID: $(cat /proc/$pid/status 2>/dev/null | grep PPid | awk '{print $2}')"
# 线程分析
echo "线程数量: $(ls /proc/$pid/task/ 2>/dev/null | wc -l)"
# 文件描述符
echo "打开文件数: $(ls /proc/$pid/fd/ 2>/dev/null | wc -l)"
# 内存分析
if [ -f /proc/$pid/status ]; then
echo "内存信息:"
cat /proc/$pid/status | grep -E "VmRSS|VmSize|VmPeak|Threads"
fi
}
# 主监控循环
monitor_loop() {
while true; do
clear
log_message "=== 开始系统负载检查 ==="
# 获取系统负载
current_load=$(get_system_load)
log_message "系统负载: $current_load"
# 检查是否超过阈值
if (( $(echo "$current_load > $ALERT_LOAD" | bc -l) )); then
log_message "警告: 系统负载超过阈值!"
# 定位高负载进程
find_high_load_processes
# 对Top进程进行深度分析
top_pid=$(ps aux --sort=-%cpu | awk 'NR==2{print $2}')
if [ ! -z "$top_pid" ]; then
deep_process_analysis $top_pid
fi
# 发送告警(可选)
# send_alert "系统负载过高"
else
log_message "系统负载正常"
fi
sleep $INTERVAL
done
}
# 主函数
main() {
echo "高负载监控脚本启动"
echo "日志文件: $LOG_FILE"
echo "检测间隔: $INTERVAL 秒"
echo "CPU告警阈值: $ALERT_CPU%"
echo "内存告警阈值: $ALERT_MEM%"
echo "按 Ctrl+C 停止监控"
echo ""
# 检查必要命令
for cmd in ps top uptime bc; do
if ! command -v $cmd &> /dev/null; then
echo "错误: 缺少命令 $cmd"
exit 1
fi
done
# 启动监控
# 取消注释下一行来启用循环监控
# monitor_loop
# 单次执行
log_message "=== 高负载进程检测 ==="
find_high_load_processes
log_message "=== 检测完成 ==="
}
# 执行主函数
main
使用说明
保存脚本
# 保存为 find_high_load.sh nano find_high_load.sh
添加执行权限
chmod +x find_high_load.sh
运行脚本
# 单次运行 ./find_high_load.sh # 如果需要持续监控 # 取消脚本中 monitor_loop 函数的注释 # 然后运行 ./find_high_load.sh & # 实时查看日志 tail -f /var/log/high_load_monitor.log
配置定时任务
# 添加到 crontab 每5分钟执行 crontab -e */5 * * * * /path/to/find_high_load.sh
主要功能说明
- CPU负载检测:识别CPU使用率过高的进程
- 内存泄漏检测:监控内存使用率异常的进程
- I/O等待分析:检测磁盘I/O瓶颈
- 僵尸进程检测:识别和清理僵尸进程
- 线程分析:查看进程的线程数量
- 文件描述符:监控进程打开的文件数量
- 网络连接:统计网络连接状态
自定义配置
您可以根据需要修改脚本中的阈值:
ALERT_CPU=80:CPU使用率告警阈值ALERT_MEM=90:内存使用率告警阈值ALERT_LOAD=5:系统负载告警阈值INTERVAL=5:监控间隔时间
这个脚本可以帮助您快速定位系统高负载的根源,适合服务器运维和性能调优场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播