随笔-调试-观察CPU和内存
目录
观察应用CPU、内存使用情况
实时打印(一般用于观察变化)
$xpid=$(pidof gdb);top -p $xpid -b -d 1 | awk '/(^\s*[0-9])/{print strftime("%H:%M:%S",systime()),$0}'
打印应用占用CPU大于阈值的线程
top -H -p $(cat /var/run/$1.pid) -o PPID -d 1 -b -w 512 | awk -F' ' '/(^top)|(^\s*[0-9])/{
if ($1~/[0-9]/) {
if ($9 > 90) arr[$1]=$12"["$9"]";
} else {
for (i in arr) line=line sep arr[i];
if (line != "") print $3,line;
delete arr;line="";
}
}'
观察应用内存使用情况(通过/proc采集):
function proc_mem_usage_total() {
local statm=($(cat /proc/$ppid/statm))
metric_list+="proc_mem_usage_total{name=\"$proc_name\", pid=\"$ppid\"} $((statm[1]*4))\n"
}
配合prometheus使用观察应用cpu变化情况(通过/proc采集):
function proc_cpu_usage_total() {
local stat=
local data=
stat=$(cat /proc/$ppid/stat)
# cpu time: utime stime cutime cstime
data=(${stat#*)})
# return lables
metric_list+="proc_cpu_usage_total{name=\"$proc_name\", pid=\"$ppid\"} $((data[11]+data[12]+data[13]+data[14]))\n"
}
function task_cpu_usage_total() {
local pid=$1
local stat=
local name=
local data=
stat=$(cat /proc/$ppid/task/$pid/stat)
# name
name=${stat%)*}
name=${name#*\(}
# cpu time: utime stime cutime cstime
data=(${stat#*)})
# return lables
metric_list+="task_cpu_usage_total{name=\"$name\", pid=\"$pid\"} $((data[11]+data[12]+data[13]+data[14]))\n"
}
观察系统cpu、内存使用最多的应用
一般方式
top -o %CPU
top -o +%MEM
其他方式
查看系统cpu使用最多的应用:
将上面的脚本-p去掉即可
查看系统内存使用最多的应用
watch "ps -eo pid,ppid,cmd,%mem --sort=-%mem | head"
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz | head -10 其中rsz是是实际内存
观察进程上下文切换
xpid=$(pidof app);pidstat -p $xpid 1 -wt -h
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/18188105