使用netstat查询端口时候,总是不能看到程序的名字,还必须要再配合PS对进程号取交集,一个两个可以,经常需要看的话就傻逼了,这个脚本就是为了解决这样的痛点,尤其是优化JAVA程序内存的时候。
在一个夜黑风高的夜晚,我飙了很久的AWK代码,终于做到了,经过数次优化,执行速度非常快。
#!/bin/bash netstat -tunlp 2>/dev/null | awk -v PAGE=`getconf PAGE_SIZE` -F "[/ ]+" ‘$(NF-1)=="java"{ sub("^0.0.0.0","*",$4) printf "%s %s %20s %s %6s ",$1,$6~/[0-9]+/?"UNCONN":$6,$4,$(NF-1),$(NF-2) system(("R=(`</proc/" ($(NF-2)) "/statm`);printf ‘%5s‘ $[${R[1]}*"PAGE"/1048576]")) printf "M " system(("readlink -f /proc/" ($(NF-2)) "/cwd")) }‘
过程解析:
显示系统的TCP和UDP套接字:netstat -tunlp:
为AWK的PAGE变量赋值内存页大小:-v PAGE=`getconf PAGE_SIZE`
将0.0.0.0替换为星号:sub("^0.0.0.0","*",$4)
打印进程号,套接字,监听状态:printf "%s %s %20s %s %6s ",$1,$6~/[0-9]+/?"UNCONN":$6,$4,$(NF-1),$(NF-2)
调用系统命令进程内存使用:system(("R=(`</proc/" ($(NF-2)) "/statm`);printf ‘%5s‘ $[${R[1]}*"PAGE"/1048576]"))
调用系统命令查询JAVA进程的名字:system(("readlink -f /proc/" ($(NF-2)) "/cwd"))
文章写的不错?请扫下面作者的讨饭专用码,鼓励作者继续分享
原文地址:https://www.cnblogs.com/yangjinheng/p/8284470.html
时间: 2024-11-05 17:25:43