1、查询docker的镜像消耗free总和
  
docker stats --no-stream --format "table {{.Container}}\t{{.Name}}\t{{.MemUsage}}" | awk '
NR==1 { print; next }
{split($3, a, "/");mem = a[1];if (mem ~ /MiB/) {mem_mb = substr(mem, 1, length(mem)-3);} else if (mem ~ /GiB/) {mem_mb = substr(mem, 1, length(mem)-3) * 1024;} else {mem_mb = 0;}printf "Container: %s, Name: %s, MemUsage: %.2f MB\n", $1, $2, mem_mb;total_mem += mem_mb;
}
END { printf "Total MemUsage: %.2f MB\n", total_mem }
'
解释
- docker stats --no-stream --format "table {{.Container}}\t{{.Name}}\t{{.MemUsage}}":获取所有容器的内存使用情况,并以表格格式输出容器 ID、容器名称和内存使用。
- awk:- NR==1 { print; next }:打印表头(第一行)。
- split($3, a, "/"); mem = a[1];:拆分内存使用字段,提取实际使用的内存部分。
- if (mem ~ /MiB/) { ... } else if (mem ~ /GiB/) { ... }:根据内存单位(MiB 或 GiB)转换为 MB。
- printf "Container: %s, Name: %s, MemUsage: %.2f MB\n", $1, $2, mem_mb; total_mem += mem_mb;:打印每个容器的内存使用,并累加总内存使用。
- END { printf "Total MemUsage: %.2f MB\n", total_mem }:在处理完所有记录后,输出总内存使用。
 
2、查询java -cp命令的free总和
ps -eo pid,user,vsz,rss,comm,args | grep 'java -cp' | grep -v grep | sort -k4 -nr | awk '
BEGIN { total_rss = 0 }
{rss_mb = $4 / 1024;printf "PID: %d, USER: %s, VSZ: %.2f MB, RSS: %.2f MB, COMMAND: %s, ARGS: %s\n", $1, $2, $3 / 1024, rss_mb, $5, substr($0, index($0, $6));total_rss += rss_mb;
}
END { printf "Total RSS: %.2f MB\n", total_rss }
'
解释
- ps -eo pid,user,vsz,rss,comm,args:列出所有进程的信息,包含 PID、用户、虚拟内存、常驻内存、命令和完整的命令行参数。
- grep java:筛选出包含- java的行。
- grep -v grep:排除包含- grep的行,以免抓到本次- grep java命令自身。
- sort -k4 -nr:按第4列(RSS)降序排列。
- awk:- BEGIN { total_rss = 0 }:在处理记录之前初始化- total_rss为 0。
- { rss_mb = $4 / 1024; printf "PID: %d, USER: %s, VSZ: %.2f MB, RSS: %.2f MB, COMMAND: %s, ARGS: %s\n", $1, $2, $3 / 1024, rss_mb, $5, substr($0, index($0, $6)); total_rss += rss_mb; }:处理每条记录,将- RSS从 KB 转换为 MB,并将其累加到- total_rss中。
- END { printf "Total RSS: %.2f MB\n", total_rss }:在处理完所有记录后输出- total_rss。
 
3、查询java -cp的各个进程的占用内存
ps -eo pid,user,vsz,rss,comm,args | grep 'java -cp' | grep -v grep | sort -k4 -nr | awk '{ printf "PID: %d, USER: %s, VSZ: %.2f MB, RSS: %.2f MB, COMMAND: %s, ARGS: %s\n", $1, $2, $3/1024, $4/1024, $5, substr($0, index($0,$6)) }'
解释
- ps -eo pid,user,vsz,rss,comm,args:列出所有进程的信息,包含 PID、用户、虚拟内存、常驻内存、命令和完整的命令行参数。
- grep java:筛选出包含- java的行。
- grep -v grep:排除包含- grep的行,以免抓到本次- grep java命令自身。
- sort -k4 -nr:按第4列(RSS)降序排列。
- awk '{ printf "PID: %d, USER: %s, VSZ: %.2f MB, RSS: %.2f MB, COMMAND: %s, ARGS: %s\n", $1, $2, $3/1024, $4/1024, $5, substr($0, index($0,$6)) }':格式化输出,将- VSZ和- RSS从 KB 转换为 MB,并显示具体的程序路径。
4、ps 命令查看进程内存使用情况
 按内存使用百分比排序,并显示前几行占用内存最多的进程。
ps aux --sort=-%mem | head
用mb显示
  
ps aux --sort=-%mem | awk 'NR==1 {print; next} {printf "%s %s %s %s %.2f MB %.2f MB %s %s %s %s %s %s %s\n", $1, $2, $3, $4, $5/1024, $6/1024, $7, $8, $9, $10, $11, $12, $13}'