当前位置:网站首页>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;
}
}边栏推荐
- Exclusive interview with the person in charge of openkruise: to what extent has cloud native application automation developed now?
- Buuctf, misc: sniffed traffic
- Blue Bridge Cup -- guess age
- 2022 safety officer-a certificate registration examination and summary of safety officer-a certificate examination
- Es6~es12 knowledge sorting and summary
- Bluebridge cup Guoxin Changtian single chip microcomputer -- hardware environment (I)
- What are the common computer problems and solutions
- Kali2021.4a build PWN environment
- Overview of Yunxi database executor
- 油猴插件
猜你喜欢

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

Exness: the Central Bank of England will raise interest rates again in March, and inflation is coming

Leetcode week 4: maximum sum of arrays (shape pressing DP bit operation)
![[Android reverse] use the DB browser to view and modify the SQLite database (copy the database file from the Android application data directory | use the DB browser tool to view the data block file)](/img/6e/3ffa91154a718b6ace6c8ca87c5995.jpg)
[Android reverse] use the DB browser to view and modify the SQLite database (copy the database file from the Android application data directory | use the DB browser tool to view the data block file)

Shell script three swordsman awk

This time, thoroughly understand bidirectional data binding 01

Opengauss database log management guide

BUUCTF,Misc:LSB

The 2022 global software R & D technology conference was released, and world-class masters such as Turing prize winners attended

Niuke winter vacation training camp 4 g (enumeration optimization, Euler power reduction)
随机推荐
How to solve the problem of computer networking but showing no Internet connection
Plug - in Oil Monkey
JS Demo calcule combien de jours il reste de l'année
Preliminary analysis of smart microwave radar module
Teach you how to run two or more MySQL databases at the same time in one system
To rotate 90 degrees clockwise and modify the video format
Analysis report on the development trend and Prospect of global and Chinese supercontinuum laser source industry Ⓚ 2022 ~ 2027
Uboot migration
Overview of Yunxi database executor
Miscellaneous things that don't miss the right business
540. Single element in ordered array
How about agricultural futures?
How can enterprises and developers take advantage of the explosion of cloud native landing?
Classification and extension of OC
Exness: the Central Bank of England will raise interest rates again in March, and inflation is coming
The latest analysis of crane driver (limited to bridge crane) in 2022 and the test questions and analysis of crane driver (limited to bridge crane)
Pat grade A - 1164 good in C (20 points)
Code in keil5 -- use the code formatting tool astyle (plug-in)
webAssembly
How to obtain opensea data through opensea JS