linux查看进程内存占用
一、概述
需要知道一台机器上面跑的java程序,各占用了多少内存。
二、查看
ps -aux | grep xxx
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
可以看到RSS,也就是物理内存占用,单位是KB。RSS是常驻内存集(Resident Set Size),表示该进程分配的内存大小。RSS不包括进入交换分区的内存。RSS包括共享库占用的内存(只要共享库在内存中)RSS包括所有分配的栈内存和堆内存。
输出如下:

root 4544 7.9 8.6 3141048 705316 ? Sl 14:49 2:37 java -Djava.rmi.server.hostname=192.168.31.150 -Dcom.sun.management.jmxremote.port=12002 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.userenticate=false -Xms512m -Xmx512m -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /data/tomcat_test_service_user/service-user.jar root 4870 0.0 0.0 103320 888 pts/0 S+ 15:22 0:00 grep java root 6072 0.1 8.5 3141104 697052 ? Sl Jul18 188:59 java -Djava.rmi.server.hostname=192.168.31.150 -Dcom.sun.management.jmxremote.port=12004 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.meetingenticate=false -Xms512m -Xmx512m -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /data/tomcat_test_service_meeting/service-meeting.jar root 11257 0.0 6.5 3105424 537836 ? Sl Oct21 28:06 java -Djava.rmi.server.hostname=192.168.31.150 -Dcom.sun.management.jmxremote.port=12001 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xms512m -Xmx512m -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /data/code/test-config-server_8762/config-server.jar root 17346 0.0 6.0 3132864 499504 ? Sl Oct21 41:46 java -Djava.rmi.server.hostname=192.168.31.150 -Dcom.sun.management.jmxremote.port=12000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xms512m -Xmx512m -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /data/tomcat_test_eureka_server/eureka-server.jar root 18127 0.4 7.7 3153628 632068 ? Sl Oct21 209:39 java -Djava.rmi.server.hostname=192.168.31.150 -Dcom.sun.management.jmxremote.port=12005 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.gatewayenticate=false -Xms512m -Xmx512m -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /data/tomcat_test_gateway_server/gateway-server.jar root 28033 0.2 7.2 3165680 591664 ? Sl Oct12 134:32 java -Djava.rmi.server.hostname=192.168.31.150 -Dcom.sun.management.jmxremote.port=12003 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xms512m -Xmx512m -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /data/tomcat_test_auth_server/auth-server.jar
RSS单位是KB,要转换为具体的MB,怎么做呢?
三、单位转换
先来看一个例子,假设有一个进程,RSS值为:103320
#!/usr/bin/env python3 # coding: utf-8 import math def convertBytes(bytes, lst=None): if lst is None: lst=['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'] i = int(math.floor( # 舍弃小数点,取小 math.log(bytes, 1024) # 求对数(对数:若 a**b = N 则 b 叫做以 a 为底 N 的对数) )) if i >= len(lst): i = len(lst) - 1 return ('%.2f' + " " + lst[i]) % (bytes/math.pow(1024, i)) if __name__ == '__main__': RSS = 103320 print(convertBytes(int(RSS)*1024))
执行输出:
100.90 MB
注意:因为它是KB,转换为bytes,需要*1024
三、批量转换
将 ps -aux | grep java 命令的输出结果,写入到一个文件 pro.txt
新建一个 test.py文件,内容如下:

#!/usr/bin/env python3 # coding: utf-8 import math def convertBytes(bytes, lst=None): if lst is None: lst=['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'] i = int(math.floor( # 舍弃小数点,取小 math.log(bytes, 1024) # 求对数(对数:若 a**b = N 则 b 叫做以 a 为底 N 的对数) )) if i >= len(lst): i = len(lst) - 1 return ('%.2f' + " " + lst[i]) % (bytes/math.pow(1024, i)) if __name__ == '__main__': with open('pro.txt',encoding='utf-8') as f: for i in f: i = i.strip() cut_row = i.split() # print(cut_row) USER = cut_row[0] PID = cut_row[1] CPU = cut_row[2] MEM = cut_row[3] VSZ = cut_row[4] RSS = cut_row[5] TTY = cut_row[6] STAT = cut_row[7] START = cut_row[8] TIME = cut_row[9] COMMAND = cut_row[10] JAR_NAME = cut_row[-1] if JAR_NAME != 'java': # print(RSS) print(JAR_NAME,' ',convertBytes(int(RSS)*1024))
执行输出:
/data/tomcat_test_service_user/service-user.jar 688.79 MB /data/tomcat_test_service_meeting/service-meeting.jar 680.71 MB /data/code/test-config-server_8762/config-server.jar 525.23 MB /data/tomcat_test_eureka_server/eureka-server.jar 487.80 MB /data/tomcat_test_gateway_server/gateway-server.jar 617.25 MB /data/tomcat_test_auth_server/auth-server.jar 577.80 MB
将结果,直接复制到excel文件中。
如果需要统计,去掉MB单位后,就可以做一下SUM计算了。
本文参考链接:
分类:
python 运维开发
标签:
运维开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2018-11-23 ElasticSearch 6.x head插件安装