1. 程式人生 > >Runtime監控專案記憶體使用情況

Runtime監控專案記憶體使用情況

在工作中,有時候需要實時去監控記憶體的使用情況,當然監控javajvm記憶體的方法有很多,比如:sunjdk版本1.51.6之後中就帶了很多這樣的工具,jstatjpsjstatdjmapjinfojconsole等一系列,這些工具基本已經能很好的去完成jvm記憶體,執行緒等監控工作。

我們現在不需要做這麼麻煩的,因為我們只是需要監控專案系統記憶體的監控,這時候就可以用到java.lang.Runtime。。每個java應用程式都有一個runtime類例項,使應用程式能和執行環境相連結,可以通過getRuntime方法獲取當前執行物件,應用程式不能建立自己的 Runtime 類例項。

runtime例項物件有且僅有一個Runtime類物件,因為Runtime()方法是單利模式(餓漢模式)進行設計的。

下來我們來看看Runtime類中提供的一些方法:

 void

addShutdownHook(Thread hook) 
          註冊新的虛擬機器來關閉鉤子。

 int

availableProcessors() 
          向 Java 虛擬機器返回可用處理器的數目。

 Process

exec(String command) 
          在單獨的程序中執行指定的字串命令。

 Process

exec(String[] cmdarray) 
          在單獨的程序中執行指定命令和變數。

 Process

exec(String[] cmdarray, String[] envp) 
          在指定環境的獨立程序中執行指定命令和變數。

 Process

exec(String[] cmdarray, String[] envp, File dir) 
          在指定環境和工作目錄的獨立程序中執行指定的命令和變數。

 Process

exec(String command, String[] envp) 
          在指定環境的單獨程序中執行指定的字串命令。

 Process

exec(String command, String[] envp, File dir) 
          在有指定環境和工作目錄的獨立程序中執行指定的字串命令。

 void

exit(int status) 
          通過啟動虛擬機器的關閉序列,終止當前正在執行的 Java 虛擬機器。

 long

freeMemory()
          返回 Java 虛擬機器中的空閒記憶體量。

 void

gc()
          執行垃圾回收器。

 InputStream

getLocalizedInputStream(InputStream in) 
          已過時。 從 JDK 1.1 開始,將本地編碼位元組流轉換為 Unicode 字元流的首選方法是使用InputStreamReader BufferedReader 類。

 OutputStream

getLocalizedOutputStream(OutputStream out) 
          已過時。 從 JDK 1.1 開始,將 Unicode 字元流轉換為本地編碼位元組流的首選方法是使用OutputStreamWriter、BufferedWriter PrintWriter 類。

static Runtime

getRuntime()
          返回與當前 Java 應用程式相關的執行時物件。

 void

halt(int status) 
          強行終止目前正在執行的 Java 虛擬機器。

 void

load(String filename) 
          載入作為動態庫的指定檔名。

 void

loadLibrary(String libname) 
          載入具有指定庫名的動態庫。

 long

maxMemory()
          返回 Java 虛擬機器試圖使用的最大記憶體量。

 boolean

removeShutdownHook(Thread hook) 
          取消註冊某個先前已註冊的虛擬機器關閉鉤子。

 void

runFinalization() 
          執行掛起 finalization 的所有物件的終止方法。

static void

runFinalizersOnExit(boolean value) 
          已過時。 此方法本身具有不安全性。它可能對正在使用的物件呼叫終結方法,而其他執行緒正在操作這些物件,從而導致不正確的行為或死鎖。

 long

totalMemory()
          返回 Java 虛擬機器中的記憶體總量。

 void

traceInstructions(boolean on) 
          啟用/禁用指令跟蹤。

 void

traceMethodCalls(boolean on) 
          啟用/禁用方法呼叫跟蹤。

以上方法來自於Runtimeapi文件,因為Runtime繼承類java.lang.Object,因此也繼承了Object類的一些方法:clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait

我們現在需要做記憶體監控暫時不需要全部去了解Runtime類的方法,只需要去看錶格中“藍色”標記的方法。

getRuntime

public static Runtime getRuntime(){

    Return currentRuntime;

}

返回與當前 Java 應用程式相關的執行時物件。Runtime類的大多數方法是例項方法,並且必須根據當前的執行時物件對其進行呼叫。

返回:

與當前 Java 應用程式相關的 Runtime 物件。

totalMemory

public native long totalMemory();

返回 Java 虛擬機器中的記憶體總量。此方法返回的值可能隨時間的推移而變化,這取決於主機環境。

注意,儲存任意給定型別的一個物件所需的記憶體量可能取決於實現方法。

返回:

目前為當前和後續物件提供的記憶體總量,以位元組為單位。

maxMemory

public native long maxMemory();

返回 Java 虛擬機器試圖使用的最大記憶體量。如果記憶體本身沒有限制,則返回值 Long.MAX_VALUE。

返回:

虛擬機器試圖使用的最大記憶體量,以位元組為單位。

gc

public native void gc();

執行垃圾回收器。呼叫此方法意味著 Java 虛擬機器做了一些努力來回收未用物件,以便能夠快速地重用這些物件當前佔用的記憶體。當控制從方法呼叫中返回時,虛擬機器已經盡最大努力回收了所有丟棄的物件。

名稱 gc 代表“垃圾回收器”。虛擬機器根據需要在單獨的執行緒中自動執行回收過程,甚至不用顯式呼叫 gc 方法。

方法 System.gc() 是呼叫此方法的一種傳統而便捷的方式。

當我們瞭解了以上方法時,就可以動手去實現我們自己的功能了。

 //當前JVM佔用的記憶體總數(M)

 double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024);  

 //JVM最大可用記憶體總數(M)

 double max = (Runtime.getRuntime().maxMemory()) / (1024.0 * 1024);  

 //JVM空閒記憶體(M)

 double free = (Runtime.getRuntime().freeMemory()) / (1024.0 * 1024);  

 //可用記憶體記憶體(M)

 double mayuse=(max - total + free);

 //已經使用記憶體(M)

 double used=(total-free);

相關推薦

Runtime監控專案記憶體使用情況

在工作中,有時候需要實時去監控記憶體的使用情況,當然監控java的jvm記憶體的方法有很多,比如:sun的jdk版本1.5和1.6之後中就帶了很多這樣的工具,jstat,jps,jstatd,jmap,jinfo,jconsole等一系列,這些工具基本已經能很好的去完成j

CMake簡介,打包so檔案,編譯實際專案 用valgrind測記憶體情況

開發十年,就只剩下這套架構體系了! >>>   

使用prometheus+grafana監控springboot2專案jvm情況

軟體需求: jdk8+ grafana下載地址:https://grafana.com/grafana/download p

python專案實戰:監控電腦網路情況

前言 小編今天為大家介紹一個利用Python監控當前聯網狀態情況的python程式碼,它可以清楚地知道,你的電腦網路是否是連結成

shell腳本-監控網絡情況

腳本 shell 監控網絡並 #!/bin/bash # ------------------------------------------------------------------------------- # FileName: networkchecking # Revisio

Zabbix監控監控Redis使用情況

51cto pan 百分數 pac num 統計 ase term printf 1、如何獲取redis數據?通過info 去獲取相關所有的數據/usr/local/redis-4.0.11/src/redis-cli -h 192.168.5.149 info獲取內存相關

Linux下實現指令碼監測特定程序佔用記憶體情況

記憶體洩露是C/C++程式設計師經常需要面對的問題,除了有效地經常查找出記憶體洩露的位置外,在嵌入式的開發中,還經常需要確定自己寫的程式是否存在記憶體洩露的情況 Linux系統下,我們可以利用以下命令來獲取特定程序的執行情況: cat /proc/$PID/status 其中

視訊監控專案(含完整程式碼)

功能簡介: 採集端: 1.USB攝像頭採集資料(yuyv格式),通過v4l2 API。      2.  資料格式轉換,yuyv->yuv420p. 3.h264編碼壓縮.通過x264編碼庫 4.資料傳輸(tcp)。

linux檢視jvm實際堆記憶體情況

linux如何檢視jvm實際記憶體情況   解決方法: 1.檢視jvm的pid(下面的8499),執行:jps [[email protected] ~]# jps 8499 Bootstrap 11284 Jps

如何高效跟蹤和監控專案執行?

“一張完美的圖紙,不等於一棟堅實的大樓”,專案執行過程中對專案計劃的有效跟蹤就顯得非常重要,畢竟,專案執行過程中會遇到各種例外突發事件。 首先,跟蹤需要全方位,專案需要跟蹤和監控的內容是全方位的,至少涉及計劃任務、文件交付、風險、關鍵裝置、相關干係人的溝通、專案培訓等,為了落實責任,每個物件都需

shell 指令碼監控系統記憶體佔用率、主備機等

執行結果 shell 指令碼實現 #!/bin/sh ########################################################## #作者:LINU_BW #時間:2016-10-28 #功能:監控伺服器系統IP cpu 記憶體 磁碟 主備&nb

Linux監控磁碟使用情況,當使用率達到90%,自動發郵件

#************************************************************************* # FileName : disk_capacity_alarm.sh #**************

檢視記憶體情況

jinfo:可以輸出並修改執行時的java 程序的opts。  jps:與unix上的ps類似,用來顯示本地的java程序,可以檢視本地執行著幾個java程式,並顯示他們的程序號。  jstat:一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量。&

Linux 檢視程序消耗記憶體情況總結

在Linux中,有很多命令或工具檢視記憶體使用情況,今天我們來看看如何檢視程序消耗、佔用的記憶體情況,Linux的記憶體管理和相關概念要比Windows複雜一些。在此之前,我們需要了解一下Linux系統下面有關記憶體的專用名詞和專業術語概念: 實體記憶體和虛擬記

jmap、jstat、jconsole、MemoryAnalyzer等工具檢視java記憶體情況

jmap (linux下特有,也是很常用的一個命令)   觀察執行中的jvm實體記憶體的佔用情況。   引數如下:   -heap :列印jvm heap的情況   -histo: 列印jvm heap的直方圖。其輸出資訊包括類名,物件數量,物件佔用大小。   

使用Druid監控專案的sql和service

本文提要 前文也提到過druid不僅僅是一個連線池技術,因此在將整合druid到專案中後,這一篇文章將去介紹druid的其他特性和功能,作為一個輔助工具幫助提升專案的效能,本文的重點就是兩個字:監控。 我的github地址點這裡 druid監控 因為已經做了整合,所以這一步

專案管理必備——使用燃盡圖監控專案整體進度

在《跳出任務管理的泥沼,擁抱甘特圖的懷抱》一文中,我談到了使用甘特圖來規劃任務。甘特圖更多的關注每一個任務的進度上。那麼如果我希望瞭解專案整體的進度,應該如何選擇呢?此時就需要引入另一個簡單又強大的工具:燃盡圖(Burn down chart)。 什麼是燃盡圖 假設專案X有5個任務,我們在預估這些任務的時

部署點評Cat監控專案

在專案中監控程式碼執行的狀況,可以採用點評的Cat專案來監控整個專案,但是按照官方的文件來部署cat,總會遇到各種問題,講解的也不夠簡明清楚,現在用一個單機來部署執行cat監控專案。 首先,到專案的g

新增自定義監控專案 配置郵件告警 測試告警 不發郵件的問題處理

1,新增自定義監控專案。 首先到服務端驗證,執行命令 zabbix_get -s 192.168.177.130-p 10050 -k 'my.estab.count‘ 然後在zabbix監控中心(瀏覽器)配置增加監控專案 鍵值寫my.estab.count 新增該專案後,到

新增自定義監控專案

需求:監控某臺web的80埠連線數,並出圖兩步:1)zabbix監控中心建立監控專案;2)針對該監控專案以圖形展現對於第一步,需要到客戶端定義指令碼 vim /usr/local/sbin/estab.sh //內容如下 #路徑和名字都是自定義。#!/bin/bash##獲取80埠併發連線數 netstat