Linux查看Java进程PID、端口号和内存占用脚本

6 篇文章 0 订阅

Linux查看Java进程PID、端口号和内存占用脚本

背景

正常情况下,一个jps -ml就可以查看机器上有多少Java进程以及它们的PID,如果还要看端口号,甚至内存占用,就还要配合netstat以及ps等查询,如果直接使用一个命令就能查出所有信息多好呀,那就试试吧。

查询PID

Java自带的jps就很好用,不多说。

查询占用端口

使用netstat工具,根据Java进程的PID查询这个PID占用的端口,一定是状态为LISTEN,并且PID/NAME = PID/java的记录。这在一台机器启多个Java Web项目的时候很有用,比如测试环境一台机器上的多个spring-boot项目,没有网关的情况下,经常搞不清到底访问哪个端口。

查询内存占用百分比

感觉机器很卡,free一下发现内存没了,看看哪个java占用的内存偏高,可以使用ps -e -o 'pid,pmem'查询PID内存占用的百分比。

脚本

vi ~/bin/superJps

##>>>>>>>>>>>>>>>>>>>>>>>file input>>>>>>>>>>>>>>>>>>>>>
#!/bin/bash

# 临时文件路径,保存jps信息
TMP_FILE_PATH=/tmp/superJps.tmp
jps -ml > $TMP_FILE_PATH

# java进程占用的内存总百分比
SUM_PMEM=0

# 展示第一行表头
echo -e "PID\tPORT\tPMEM\tJAR"

# 逐行读入jps内容
while read LINE
do
        # 首先转换为数组,第一列是PID,第二列是详细描述
        JPS_ARRAY=($LINE)
        # 占用端口
        PORT=`netstat -nlp | awk '{if($6=="LISTEN" && $7=="'"${JPS_ARRAY[0]}/java"'")print $4}' | awk -F ":" '{print $4}'`
        # 占用内存
        PMEM=`ps -e -o 'pid,pmem' | sed s/'^\s*'/''/ | egrep "^${JPS_ARRAY[0]}" | awk '{print $2}'`
        # 输出
        echo -e "${JPS_ARRAY[0]}\t$PORT\t$PMEM%\t${JPS_ARRAY[1]}"
        # 内存百分比求和
        if  [ ! -n "$PMEM" ] ;then
                SUM_PMEM=`echo $SUM_PMEM+0|bc`
        else
                SUM_PMEM=`echo $SUM_PMEM+$PMEM|bc`
        fi
done < $TMP_FILE_PATH

# 展示总的内存占用百分比
echo "PMEM_TOTAL: $SUM_PMEM%"
##>>>>>>>>>>>>>>>>>>>>>>>file input>>>>>>>>>>>>>>>>>>>>>

使用

先给可执行权限,root用户赋最高权限,其他用户赋可读可执行权限:

chmod 755 superJps

可以把路径写到环境变量里,这样就不用每次带路径:

vi /etc/profile

export PATH=$PATH:/root/bin

source /etc/profile

# 使用
[root@dbaasdev01 bin]# superJps
PID     PORT    PMEM    JAR
24337   8761    7.8%    /any/path/a.jar
20851   8190    4.4%    /any/path/b.jar
13651   9010    7.1%    /any/path/c.jar
6565            %       sun.tools.jps.Jps
26118   8081    4.1%    /any/path/d.jar
8631    8091    4.0%    /any/path/e.jar
32375   8088    4.4%    /any/path/f.jar
20986   8082    10.2%   /any/path/g.jar
14205   9000    9.6%    /any/path/h.jar
20909   8084    3.8%    /any/path/i.jar
PMEM_TOTAL: 55.4%
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Linux中,可以使用一些命令和工具来批量查询java进程端口号。 1. 使用命令ps查找所有java进程PID进程ID):ps -ef | grep java 该命令会列出系统中所有正在运行的java进程及其相关信息。如果只需要显示java进程PID,可以使用awk命令提取:ps -ef | grep java | awk '{print $2}' 2. 使用命令netstat结合PID查找对应的端口号:netstat -anp | grep PIDPID替换为上一步获取到的进程PID。该命令会显示该进程占用端口号及其相关信息。 3. 批量查询所有java进程端口号: ```shell #!/bin/bash for pid in $(ps -ef | grep java | awk '{print $2}'); do echo "Java进程PID:$pid" echo "端口号:" netstat -anp | grep $pid | grep LISTEN | awk '{print $4}' done ``` 将上述代码保存为脚本文件(如find_java_ports.sh),然后在终端运行该脚本即可批量查询所有java进程端口号。 这些方法可以帮助您快速批量查询并获取系统中所有java进程端口号。 ### 回答2: 在Linux系统中,你可以使用以下命令批量查询Java进程端口号: 1. 首先,使用`ps`命令查找所有正在运行的Java进程。可以使用以下命令: ``` ps -ef | grep java ``` 这将显示所有包含"java"关键字的运行中进程。其中,"-ef"选项用于显示所有进程的详细信息。 2. 从上一步的输出中,我们可以提取出Java进程PID进程ID)。PID进程的唯一标识符,我们可以使用它来查询相关的信息。你可以先将结果保存到一个文件中,然后使用`awk`命令提取PID,如下所示: ``` ps -ef | grep java > java_processes.txt awk '{print $2}' java_processes.txt ``` 这将显示所有Java进程PID。 3. 接下来,我们可以使用`netstat`命令来查询每个Java进程端口号。你可以使用以下命令: ``` netstat -tunlp | grep java ``` 其中,"-tunlp"选项用于显示所有TCP和UDP的端口信息。 有了以上的步骤,你就可以批量查询Java进程端口号了。请注意,你需要有适当的权限来执行这些命令。如需进一步理解命令和参数,请参考Linux相关文档或使用命令的帮助选项。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值