当前位置:网站首页>Get current JVM data
Get current JVM data
2022-07-03 22:27:00 【User 2700206】
Get current jvm data
import java.io.InputStreamReader; import java.io.LineNumberReader; import java.lang.management.ManagementFactory; import org.apache.log4j.Logger; import com.sun.management.OperatingSystemMXBean; public class MonitorUtil { private static final Logger logger = Logger.getLogger(MonitorUtil.class); // It can be set longer , Prevent reading the cpu Occupancy rate , It's not allowed private static final int CPUTIME = 5000; private static final int PERCENT = 100; private static final int FAULTLENGTH = 10; /** *//** * Get the current monitoring object . */ public static String getMonitorInfoBean() throws Exception { int kb = 1024; // Available memory long totalMemory = Runtime.getRuntime().totalMemory() / kb; // The remaining memory long freeMemory = Runtime.getRuntime().freeMemory() / kb; // Maximum available memory long maxMemory = Runtime.getRuntime().maxMemory() / kb; OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); // operating system String osName = System.getProperty("os.name"); // Total physical memory long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb; // Remaining physical memory long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb; // Physical memory used long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb .getFreePhysicalMemorySize()) / kb; // Get the total number of threads ThreadGroup parentThread; for (parentThread = Thread.currentThread().getThreadGroup(); parentThread .getParent() != null; parentThread = parentThread.getParent()) ; int totalThread = parentThread.activeCount(); double cpuRatio = 0; if (osName.toLowerCase().startsWith("windows")) { cpuRatio = getCpuRatioForWindows(); } StringBuffer sb = new StringBuffer(); double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024); double max = (Runtime.getRuntime().maxMemory()) / (1024.0 * 1024); double free = (Runtime.getRuntime().freeMemory()) / (1024.0 * 1024); logger.info("Java The maximum amount of memory a virtual machine tries to use ( At present JVM Maximum available memory ) maxMemory(): " + max + "MB<br/>"); logger.info("Java Total memory in the virtual machine ( At present JVM Total amount of memory occupied ) totalMemory(): " + total + "MB<br/>"); logger.info("Java The amount of free memory in a virtual machine ( At present JVM Free memory ) freeMemory(): " + free + "MB<br/>"); logger.info(" because JVM Use physical memory only when memory is needed , therefore freeMemory() The value of is usually very small ,<br/>" + " and JVM The actual available memory is not equal to freeMemory(), It should be equal to maxMemory() - totalMemory() + freeMemory().<br/>"); logger.info("JVM Actually available memory : " + (max - total + free) + "MB<br/>"); logger.info("cpu Occupancy rate =" + cpuRatio+"/n"); logger.info(" Available memory =" + totalMemory+"/n"); logger.info(" The remaining memory =" + freeMemory+"/n"); logger.info(" Maximum available memory =" + maxMemory+"/n"); logger.info(" operating system =" + osName+"/n"); logger.info(" Total physical memory =" + totalMemorySize + "kb/n"); logger.info(" Remaining physical memory =" + freeMemory + "kb/n"); logger.info(" Physical memory used =" + usedMemory + "kb/n"); logger.info(" Total threads =" + totalThread+ "/n"); return sb.toString(); } /** *//** * get CPU Usage rate . */ private static double getCpuRatioForWindows() { try { String procCmd = System.getenv("windir") + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine," + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount"; // Fetch process information long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd)); Thread.sleep(CPUTIME); long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd)); if (c0 != null && c1 != null) { long idletime = c1[0] - c0[0]; long busytime = c1[1] - c0[1]; return Double.valueOf( PERCENT * (busytime) / (busytime + idletime)) .doubleValue(); } else { return 0.0; } } catch (Exception ex) { ex.printStackTrace(); return 0.0; } } /** *//** * Read CPU Information . */ private static long[] readCpu(final Process proc) { long[] retn = new long[2]; try { proc.getOutputStream().close(); InputStreamReader ir = new InputStreamReader(proc.getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line = input.readLine(); if (line == null || line.length() < FAULTLENGTH) { return null; } int capidx = line.indexOf("Caption"); int cmdidx = line.indexOf("CommandLine"); int rocidx = line.indexOf("ReadOperationCount"); int umtidx = line.indexOf("UserModeTime"); int kmtidx = line.indexOf("KernelModeTime"); int wocidx = line.indexOf("WriteOperationCount"); long idletime = 0; long kneltime = 0; long usertime = 0; while ((line = input.readLine()) != null) { if (line.length() < wocidx) { continue; } // Field order :Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = substring(line, capidx, cmdidx - 1) .trim(); String cmd = substring(line, cmdidx, kmtidx - 1).trim(); if (cmd.indexOf("wmic.exe") >= 0) { continue; } // log.info("line="+line); if (caption.equals("System Idle Process") || caption.equals("System")) { idletime += Long.valueOf( substring(line, kmtidx, rocidx - 1).trim()) .longValue(); idletime += Long.valueOf( substring(line, umtidx, wocidx - 1).trim()) .longValue(); continue; } kneltime += Long.valueOf( substring(line, kmtidx, rocidx - 1).trim()) .longValue(); usertime += Long.valueOf( substring(line, umtidx, wocidx - 1).trim()) .longValue(); } retn[0] = idletime; retn[1] = kneltime + usertime; return retn; } catch (Exception ex) { ex.printStackTrace(); } finally { try { proc.getInputStream().close(); } catch (Exception e) { e.printStackTrace(); } } return null; } /** *//** * because String.subString There are problems in the processing of Chinese characters : * @param src String to intercept * @param start_idx Start coordinates ( Include this coordinate ) * @param end_idx Cut off coordinate ( Include this coordinate ) * @return */ public static String substring(String src, int start_idx, int end_idx){ byte[] b = src.getBytes(); String tgt = ""; for(int i=start_idx; i<=end_idx; i++){ tgt +=(char)b[i]; } return tgt; } }
边栏推荐
- Summary of basic knowledge of exception handling
- Some 5000+ likes, the development notes of a director of cosmic factory, leaked
- [secretly kill little partner pytorch20 days] - [day3] - [example of text data modeling process]
- Buuctf, web:[geek challenge 2019] buyflag
- Leetcode: a single element in an ordered array
- Es6~es12 knowledge sorting and summary
- IPhone development swift foundation 09 assets
- China's TPMS industry demand forecast and future development trend analysis report Ⓐ 2022 ~ 2028
- The 14th five year plan for the construction of Chinese Enterprise Universities and the feasibility study report on investment Ⓓ 2022 ~ 2028
- How about agricultural futures?
猜你喜欢
[flax high frequency question] leetcode 426 Convert binary search tree to sorted double linked list
2022 electrician (elementary) examination questions and electrician (elementary) registration examination
Redis single thread and multi thread
Pan Yueming helps Germany's Rochester Zodiac custom wristwatch
Leetcode week 4: maximum sum of arrays (shape pressing DP bit operation)
Harbor integrated LDAP authentication
2022 free examination questions for safety management personnel of hazardous chemical business units and reexamination examination for safety management personnel of hazardous chemical business units
Awk getting started to proficient series - awk quick start
Leetcode: a single element in an ordered array
Es6~es12 knowledge sorting and summary
随机推荐
What indicators should be paid attention to in current limit monitoring?
DR882-Qualcomm-Atheros-QCA9882-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-5G-high-power
The 2022 global software R & D technology conference was released, and world-class masters such as Turing prize winners attended
On my first day at work, this API timeout optimization put me down!
Code in keil5 -- use the code formatting tool astyle (plug-in)
[golang] leetcode intermediate - alphabetic combination of island number and phone number
1068. Consolidation of ring stones (ring, interval DP)
2022 free examination questions for safety management personnel of hazardous chemical business units and reexamination examination for safety management personnel of hazardous chemical business units
QGIS grid processing DEM data reclassification
Awk getting started to proficient series - awk quick start
Blue Bridge Cup Guoxin Changtian single chip microcomputer -- led lamp module (V)
Is it safe and reliable to open an account and register for stock speculation? Is there any risk?
AST (Abstract Syntax Tree)
Team collaborative combat penetration tool CS artifact cobalt strike
The latest analysis of R1 quick opening pressure vessel operation in 2022 and the examination question bank of R1 quick opening pressure vessel operation
320. Energy Necklace (ring, interval DP)
js demo 計算本年度還剩下多少天
STM32 multi serial port implementation of printf -- Based on cubemx
Morning flowers and evening flowers
Ansible common usage scenarios