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
View Code

 

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))
View Code

 

執行輸出:

/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計算了。

 

本文參考鏈接:

https://www.cnblogs.com/linyx/p/9766193.html

發佈了287 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章