当前位置:网站首页>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; } }
边栏推荐
- Buuctf, misc: sniffed traffic
- Development trend and market demand analysis report of China's energy storage battery industry Ⓩ 2022 ~ 2028
- Mindmanager2022 serial number key decompression installer tutorial
- What are the common computer problems and solutions
- Es6~es12 knowledge sorting and summary
- Summary of basic knowledge of exception handling
- Flutter internationalized Intl
- WFC900M-Network_ Card/Qualcomm-Atheros-AR9582-2T-2R-MIMO-802.11-N-900M-high-power-Mini-PCIe-Wi-Fi-Mod
- On my first day at work, this API timeout optimization put me down!
- [automation operation and maintenance novice village] flask-2 certification
猜你喜欢
Some 5000+ likes, the development notes of a director of cosmic factory, leaked
Exclusive interview with the person in charge of openkruise: to what extent has cloud native application automation developed now?
Mysql database - Advanced SQL statement (I)
The overseas listing of Shangmei group received feedback, and brands such as Han Shu and Yiye have been notified for many times and received attention
Firefox set up proxy server
webAssembly
User login function: simple but difficult
In 2022, 6G development has indeed warmed up
Teach you to easily learn the type of data stored in the database (a must see for getting started with the database)
Leetcode week 4: maximum sum of arrays (shape pressing DP bit operation)
随机推荐
Harbor integrated LDAP authentication
2022 safety officer-b certificate examination summary and safety officer-b certificate simulation test questions
Teach you to easily learn the type of data stored in the database (a must see for getting started with the database)
Data consistency between redis and database
Classification and extension of OC
Mindmanager2022 serial number key decompression installer tutorial
What are the common computer problems and solutions
How to solve the problem of computer networking but showing no Internet connection
Niuke winter vacation training camp 4 g (enumeration optimization, Euler power reduction)
[SRS] build a specified version of SRS
IDENTITY
Miscellaneous things that don't miss the right business
Team collaborative combat penetration tool CS artifact cobalt strike
js demo 計算本年度還剩下多少天
Pooling idea: string constant pool, thread pool, database connection pool
BUUCTF,Misc:LSB
Leetcode week 4: maximum sum of arrays (shape pressing DP bit operation)
Blue Bridge Cup -- Mason prime
Go Technology Daily (2022-02-13) - Summary of experience in database storage selection
[sg function] lightoj Partitioning Game