Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况

合集下载

linux下如何获取cpu的利用率

linux下如何获取cpu的利用率

linux下如何获取cpu的利用率“proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。

它以文件系统的方式为访问系统内核数据的操作提供接口。

用户和应用程序可以通过proc 得到系统的信息,并可以改变内核的某些参数。

”这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc 文件系统修改内核的相关配置。

1、从/proc文件系统获取相关的性能参数cpu使用率:/proc/stat内存使用情况:/proc/meminfo网络负载信息:/proc/net/dev相应的计算方法:(摘自:什么是proc文件系统,见参考资料)(1)处理器使用率(2)内存使用率(3)流入流出数据包(4)整体网络负载这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。

如里有问题或对要提取的数据不太清楚,可以使用man proc来查看proc文件系统的联机手册。

(1)处理器使用率这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。

它们均位于/proc/stat文件的第一行。

CPU 的利用率使用如下公式来计算。

CPU利用率= 100 *(user + nice + system)/(user + nice + system + idle)(2)内存使用率这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。

内存使用百分比= 100 * (cmem / umem)(3)网络利用率为了得到网络利用率的相关数据,需要从/proc/net/dev文件中获得两个数据:从本机输出的数据包数,流入本机的数据包数。

它们都位于这个文件的第四行。

性能收集程序开始记录下这两个数据的初始值,以后每次获得这个值后均减去这个初始值即为从集群启动开始从本节点通过的数据包。

查看Linux系统内存、CPU、磁盘使用率和详细信息

查看Linux系统内存、CPU、磁盘使用率和详细信息

查看Linux系统内存、CPU、磁盘使⽤率和详细信息⼀、查看内存占⽤1、free# free -m以MB为单位显⽰内存使⽤情况[root@localhost ~]# free -mtotal used free shared buff/cache availableMem: 118521250866841019349873Swap: 601506015# free -h以GB为单位显⽰内存使⽤情况[root@localhost ~]# free -htotal used free shared buff/cache availableMem: 11G 1.2G 8.5G 410M 1.9G 9.6GSwap: 5.9G 0B 5.9G# free -t以总和的形式查询内存的使⽤信息[root@localhost ~]# free -ttotal used free shared buff/cache availableMem: 1213733212853448870628420268198136010105740Swap: 616038006160380Total: 18297712128534415031008# free -s 5周期性的查询内存使⽤信息每5秒执⾏⼀次命令[root@localhost ~]# free -s 5total used free shared buff/cache availableMem: 1213733212807968875008420268198152810110136Swap: 616038006160380解释:Mem:内存的使⽤情况总览表(物理内存)Swap:虚拟内存。

即可以把数据存放在硬盘上的数据shared:共享内存,即和普通⽤户共享的物理内存值buffers:⽤于存放要输出到disk(块设备)的数据的cached:存放从disk上读出的数据total:机器总的物理内存used:⽤掉的内存free:空闲的物理内存注:物理内存(total)=系统看到的⽤掉的内存(used)+系统看到空闲的内存(free)2、查看某个pid的物理内存使⽤情况# cat /proc/PID/status | grep VmRSS[root@localhost ~]# pidof nginx2732727326[root@localhost ~]#[root@localhost ~]# cat /proc/27327/status | grep VmRSSVmRSS: 2652 kB[root@localhost ~]#[root@localhost ~]# cat /proc/27326/status | grep VmRSSVmRSS: 1264 kB[root@localhost ~]#[root@localhost ~]# pidof java1973[root@localhost ~]# cat /proc/1973/status | grep VmRSSVmRSS: 1166852 kB由上⾯可知,nginx服务进程的两个pid所占物理内存为"2652+1264=3916k"3、查看本机所有进程的内存占⽐之和# cat mem_per.sh[root@localhost ~]# cat mem_per.sh#!/bin/bashps auxw|awk '{if (NR>1){print $4}}' > /opt/mem_listawk '{MEM_PER+=$1}END{print MEM_PER}' /opt/mem_list[root@localhost ~]#[root@localhost ~]# chmod755 mem_per.sh[root@localhost ~]#[root@localhost ~]# sh mem_per.sh64.4[root@localhost ~]#脚本配置解释:ps -auxw|awk '{print $3}' 表⽰列出本机所有进程的cpu利⽤率情况,结果中第⼀⾏带"%CPU"字符ps -auxw|awk '{print $4}' 表⽰列出本机所有进程的内存利⽤率情况,结果中第⼀⾏带"%MEM"字符ps auxw|awk '{if (NR>1){print $4}} 表⽰将"ps auxw"结果中的第⼀⾏过滤(NR>1)掉,然后打印第4⾏⼆、查看CPU使⽤情况1、toptop后键⼊P看⼀下谁占⽤最⼤# top -d 5周期性的查询CPU使⽤信息每5秒刷新⼀次top - 02:37:55 up 4 min, 1 user, load average: 0.02, 0.10, 0.05Tasks: 355 total, 1 running, 354 sleeping, 0 stopped, 0 zombie%Cpu(s): 3.0 us, 2.8 sy, 0.0 ni, 94.2id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st# us:表⽰⽤户空间程序的cpu使⽤率(没有通过nice调度)# sy:表⽰系统空间的cpu使⽤率,主要是内核程序。

Linux系统查看CPU使用率、内存使用率、磁盘使用率

Linux系统查看CPU使用率、内存使用率、磁盘使用率

Linux系统查看CPU使⽤率、内存使⽤率、磁盘使⽤率⼀、查看CPU使⽤率1. top 命令[root@sss ~]# toptop - 16:54:38 up 7 days, 5:13, 3 users, load average: 0.00, 0.01, 0.05Tasks: 77 total, 2 running, 75 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1882232 total, 813020 free, 330164 used, 739048 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 1386608 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+COMMAND17215 root 0 -20 127504 12176 9560 S 0.7 0.6 21:46.45AliYunDun2770 root 20 0 573932 17232 6088 S 0.3 0.9 1:11.38tuned1 root 20 0 43548 3844 2588 S 0.0 0.2 0:06.54systemd2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd3 root 20 0 0 0 0 S 0.0 0.0 0:08.75 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H... ...123456789101112131415top命令可以看到总体的系统运⾏状态和cpu的使⽤率。

%us:表⽰⽤户空间程序的cpu使⽤率(没有通过nice调度)%sy:表⽰系统空间的cpu使⽤率,主要是内核程序。

JAVA获得CPU和内存的使用情况的两种方法

JAVA获得CPU和内存的使用情况的两种方法

JAVA获得CPU和内存的使用情况的两种方法在Java中,可以使用不同的方法来获取CPU和内存的使用情况。

这些信息对于优化程序性能和资源管理非常重要。

以下是两种常用的方法:1. 使用Java Management Extensions(JMX):Java提供了JMX API来监控和管理Java应用程序。

通过使用JMX,可以获取有关系统资源的详细信息,包括CPU和内存使用情况。

a)获取CPU使用情况:要获取CPU使用情况,可以使用ng.management包中的ThreadMXBean接口。

ThreadMXBean接口提供了许多有用的方法,例如getThreadCpuTime(来获取线程的CPU时间。

可以使用以下代码来获取整个系统的CPU使用情况:```javaimport ng.management.ManagementFactory;import ng.management.ThreadMXBean;public class CPUMonitorpublic static void main(String[] args)ThreadMXBean threadMXBean =ManagementFactory.getThreadMXBean(;long cpuTime = threadMXBean.getCurrentThreadCpuTime(;System.out.println("CPU Time: " + cpuTime);}}```b)获取内存使用情况:要获取内存使用情况,可以使用ng.management包中的MemoryMXBean和MemoryUsage类。

MemoryMXBean提供了获取内存使用情况的方法,而MemoryUsage类用于表示内存使用情况。

以下是一个示例代码:```javaimport ng.management.ManagementFactory;import ng.management.MemoryMXBean;import ng.management.MemoryUsage;public class MemoryMonitorpublic static void main(String[] args)MemoryMXBean memoryMXBean =ManagementFactory.getMemoryMXBean(;MemoryUsage heapMemoryUsage =memoryMXBean.getHeapMemoryUsage(;MemoryUsage nonHeapMemoryUsage =memoryMXBean.getNonHeapMemoryUsage(;System.out.println("Heap Memory Usage: " + heapMemoryUsage);System.out.println("Non-Heap Memory Usage: " + nonHeapMemoryUsage);}}```2. 使用操作系统命令和Java进程的ManagementFactory:Java还提供了一种通过执行操作系统命令并解析结果来获取CPU和内存使用情况的方法。

使用Linux终端监测系统资源使用情况

使用Linux终端监测系统资源使用情况

使用Linux终端监测系统资源使用情况Linux终端是一种强大的工具,可用于监测系统资源的使用情况。

通过使用Linux终端,我们可以实时地查看系统的CPU、内存、磁盘等资源的使用情况,以便及时调整和优化系统性能。

本文将介绍如何使用Linux终端监测系统资源使用情况,以及一些常用的命令和技巧。

一、查看CPU使用情况在Linux终端上,我们可以使用top命令来查看系统的CPU使用情况。

要打开终端并输入top命令,然后按回车键。

top命令会显示一个实时的系统监视器,其中包含各个进程的CPU使用率、内存使用率等信息。

按下键盘上的“q”键可以退出top命令。

二、查看内存使用情况使用free命令可以查看系统的内存使用情况。

在终端上输入free命令,然后按回车键。

free命令将显示系统的总内存、已使用的内存、空闲的内存以及缓冲区和缓存的内存情况。

此外,我们还可以通过top命令查看进程的内存使用情况。

三、查看磁盘使用情况使用df命令可以查看系统的磁盘使用情况。

在终端上输入df命令,然后按回车键。

df命令将显示系统上各个磁盘分区的总容量、已使用的容量、剩余容量以及使用百分比。

如果想要查看某个具体目录的磁盘使用情况,可以在df命令后加上该目录的路径。

四、查看网络使用情况使用ifconfig命令可以查看系统的网络接口和IP地址。

在终端上输入ifconfig命令,然后按回车键。

ifconfig命令将显示系统上各个网络接口的IP地址、子网掩码、广播地址等详细信息。

此外,我们还可以使用netstat命令来查看系统的网络连接情况。

五、查看进程使用情况使用ps命令可以查看系统上运行的进程。

在终端上输入ps命令,然后按回车键。

ps命令将显示系统上所有进程的详细信息,包括进程ID、进程名称、运行时间等。

如果想要按照特定的条件进行过滤显示,可以结合使用grep和ps命令。

六、查看日志文件系统的日志文件记录了系统各个方面的运行情况,通过查看日志文件可以了解系统的运行状态和故障原因。

【Java】+获取Linux服务器的CPU、内存使用率

【Java】+获取Linux服务器的CPU、内存使用率

【Java】+获取Linux服务器的CPU、内存使⽤率package montool;import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.Session;import ch.ethz.ssh2.StreamGobbler;import montool.file.ZgxFileUtil;import ng3.tuple.Pair;import org.apache.log4j.Logger;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;/*** @author* @version 1.0* @time 2019/7/15 20:28* <p>* 类功能说明:* 1、连接服务器* 2、执⾏Linux⽇志查询命令,返回查询后的⽇志字符串(以⾏为单位)*/public class LogAuto {private static Logger log;private Session ssh;private String hostName;private String userName;private String password;private int port;/*** 连接服务器** @param hostname 服务器IP* @param port 端⼝* @param username 账号* @param password 密码*/public LogAuto(String hostname, int port, String username, String password) {this.hostName = hostname;this.port = port;erName = username;this.password = password;this.log = ZgxLoggerUtil.getLoger(LogAuto.class);}/*** 通过Linux命令查询⽇志内容** @param command Linux⽇志查询命令* @return返回根据命令查出的⽇志内容*/public List<String> execCom(String command) {Connection conn = new Connection(this.hostName, this.port);createConnection(conn);List<String> logContent = new ArrayList<String>();try {ssh.execCommand(command);} catch (IOException e) {e.printStackTrace();}//将Terminal屏幕上的⽂字全部打印出来InputStream is = new StreamGobbler(ssh.getStdout());BufferedReader brs = new BufferedReader(new InputStreamReader(is));while (true) {String line = null;try {line = brs.readLine();} catch (IOException e) {e.printStackTrace();}if (line == null) {break;}// System.out.println(line);logContent.add(line);}return logContent;}private void createConnection(Connection connection) {//创建连接try {connection.connect();} catch (IOException e) {e.printStackTrace();}try {connection.authenticateWithPassword(erName, this.password);} catch (IOException e) {e.printStackTrace();}//创建与服务器的会话节点try {setSsh(connection.openSession());} catch (IOException e) {e.printStackTrace();}}private void setSsh(Session ssh) {this.ssh = ssh;}private Session getSsh() {return ssh;}/*** 功能:获取指定服务器在当前时间的内存使⽤率** @param logAuto* @return返回使⽤率(百分⽐)*/public static double getMemoryRate(LogAuto logAuto) {String shell = String.format("%s", "free"); // 多个命令⽤“;”隔开List<String> listResult = logAuto.execCom(shell);// 打印shell命令执⾏后的结果for (int i = 0; i < listResult.size(); i++) {System.out.println(listResult.get(i));}// 提取内存数据(第⼆⾏)List<String> mem = ZgxStringUtil.splitString(listResult.get(1), " ");Integer usedMemory = Integer.valueOf(mem.get(2));Integer allMemory = Integer.valueOf(mem.get(1));(String.format("usedMemory=%s;allMemory=%s", usedMemory, allMemory));// 计算内存使⽤率(已使⽤内存/总内存)double f1 = new BigDecimal((float) usedMemory / allMemory).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100; (String.format("内存使⽤率=%s%s", f1, "%"));return f1;}private static Pair getCpuData(LogAuto logAuto) {String shell = String.format("%s", "cat /proc/stat"); // 多个命令⽤“;”隔开List<String> listResult = logAuto.execCom(shell);// 打印shell命令执⾏后的结果for (int i = 0; i < listResult.size(); i++) {System.out.println(listResult.get(i));}// 提取CPU数据(第⼀⾏)List<String> mem = ZgxStringUtil.splitString(listResult.get(0), " ");mem.remove(0);Long allTime1 = 0L;for (int i = 0; i < mem.size(); i++) {allTime1 += Long.valueOf(mem.get(i));}System.out.println(String.format("CPU使⽤总时间=%s;idle=%s", allTime1, mem.get(3)));return Pair.of(allTime1, mem.get(3));}/*** 功能:获取指定服务器在当前时间的CPU使⽤率** @param logAuto* @return返回使⽤率(百分⽐)*/public static double getCpuRate(LogAuto logAuto) {Pair cpuData1 = getCpuData(logAuto);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}Pair cpuData2 = getCpuData(logAuto);// step1 计算两次的cpu总时间Long allTime = Long.valueOf(cpuData2.getLeft().toString()) - Long.valueOf(cpuData1.getLeft().toString());// step2 计算两次的cpu剩余时间Long idle = Long.valueOf(cpuData2.getRight().toString()) - Long.valueOf(cpuData1.getRight().toString());// step3 计算两次的cpu使⽤时间Long used = allTime - idle;// step4 计算cpu使⽤率(cpu使⽤率 = 使⽤时间 / 总时间 * 100%)double f1 = new BigDecimal((float) used / allTime).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100; (String.format("CPU使⽤率=%s%s", f1, "%"));return f1;}public static void main(String[] args) {LogAuto logAuto = new LogAuto("服务器IP", 端⼝号, "账号", "密码");getMemoryRate(logAuto);getCpuRate(logAuto);String[] header = {"时间,CPU使⽤率,内存使⽤率"};List<String[]> content = new ArrayList<>();// 每分钟获取⼀次服务器CPU、内存使⽤率(获取30次)for (int i = 0; i < 30; i++) {String[] data = {ZgxDateUtil.getNowDate("yyyy-MM-dd HH:mm:ss"), String.valueOf(getCpuRate(logAuto)), String.valueOf(getMemoryRate(logAuto))};content.add(data);ZgxFileUtil.writeCsv("服务器性能数据.csv", header, content);try {Thread.sleep(1000 * 60);} catch (InterruptedException e) {e.printStackTrace();}}}}。

linux下实现CPU使用率和内存使用率获取方法

linux下实现CPU使用率和内存使用率获取方法

linux下实现CPU使⽤率和内存使⽤率获取⽅法想获取⼀下⽬标机运⾏时linux系统的硬件占⽤情况,写了这⼏个⼩程序,以后直接⽤了。

⽅法就是读取proc下的⽂件来获取了。

cpu使⽤率: /proc/stat ,内存使⽤情况: /proc/meminfo看程序:typedef struct PACKED //定义⼀个cpu occupy的结构体{char name[20]; //定义⼀个char类型的数组名name有20个元素unsigned int user; //定义⼀个⽆符号的int类型的userunsigned int nice; //定义⼀个⽆符号的int类型的niceunsigned int system;//定义⼀个⽆符号的int类型的systemunsigned int idle; //定义⼀个⽆符号的int类型的idle}CPU_OCCUPY;typedef struct PACKED //定义⼀个mem occupy的结构体{char name[20]; //定义⼀个char类型的数组名name有20个元素unsigned long total;char name2[20];unsigned long free;}MEM_OCCUPY;get_memoccupy (MEM_OCCUPY *mem) //对⽆类型get函数含有⼀个形参结构体类弄的指针O{FILE *fd;int n;char buff[256];MEM_OCCUPY *m;m=mem;fd = fopen ("/proc/meminfo", "r");fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);sscanf (buff, "%s %u %s", m->name, &m->total, m->name2);fgets (buff, sizeof(buff), fd); //从fd⽂件中读取长度为buff的字符串再存到起始地址为buff这个空间⾥sscanf (buff, "%s %u", m->name2, &m->free, m->name2);fclose(fd); //关闭⽂件fd}int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n){unsigned long od, nd;unsigned long id, sd;int cpu_use = 0;od = (unsigned long) (o->user + o->nice + o->system +o->idle);//第⼀次(⽤户+优先级+系统+空闲)的时间再赋给odnd = (unsigned long) (n->user + n->nice + n->system +n->idle);//第⼆次(⽤户+优先级+系统+空闲)的时间再赋给odid = (unsigned long) (n->user - o->user); //⽤户第⼀次和第⼆次的时间之差再赋给idsd = (unsigned long) (n->system - o->system);//系统第⼀次和第⼆次的时间之差再赋给sdif((nd-od) != 0)cpu_use = (int)((sd+id)*10000)/(nd-od); //((⽤户+系统)乖100)除(第⼀次和第⼆次的时间差)再赋给g_cpu_usedelse cpu_use = 0;//printf("cpu: %u/n",cpu_use);return cpu_use;}get_cpuoccupy (CPU_OCCUPY *cpust) //对⽆类型get函数含有⼀个形参结构体类弄的指针O{FILE *fd;int n;char buff[256];CPU_OCCUPY *cpu_occupy;cpu_occupy=cpust;fd = fopen ("/proc/stat", "r");fgets (buff, sizeof(buff), fd);sscanf (buff, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle);fclose(fd);}int main(){CPU_OCCUPY cpu_stat1;CPU_OCCUPY cpu_stat2;MEM_OCCUPY mem_stat;int cpu;//获取内存get_memoccupy ((MEM_OCCUPY *)&mem_stat);//第⼀次获取cpu使⽤情况get_cpuoccupy((CPU_OCCUPY *)&cpu_stat1);sleep(10);//第⼆次获取cpu使⽤情况get_cpuoccupy((CPU_OCCUPY *)&cpu_stat2);//计算cpu使⽤率cpu = cal_cpuoccupy ((CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2);return 0;}我们在搞性能测试的时候,对后台服务器的CPU利⽤率监控是⼀个常⽤的⼿段。

Linux查看服务器内存、磁盘、cpu、网络占用、端口占用情况

Linux查看服务器内存、磁盘、cpu、网络占用、端口占用情况

Linux查看服务器内存、磁盘、cpu、⽹络占⽤、端⼝占⽤情况1、查看物理CPU个数:catcat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l2、查看服务器CPU内核个数:cat 每个物理CPU中core的个数(即核数)cat /proc/cpuinfo | grep "cpu cores" | uniq3、服务器内存使⽤情况:freefree -m --查看内存,不带单位free -h --查看内存使⽤情况,带单位,显⽰查看结果(对于新⼿来说这个更详细些)total:总计物理内存的⼤⼩used:已使⽤内存free:可⽤内存Shared:多个进程共享的内存总额Buffers/cached:磁盘缓存的⼤⼩缓存是可以清除的4.top --可以查看服务器各个进程情况uptime -- 可以查看机器多少条没有重启了,⼀共多少个⽤户退出top :q 或者 ctrl+c每个字段的解读Procs(进程):r: 运⾏队列中进程数量,这个值也可以判断是否需要增加CPU。

(长期⼤于1)b: 等待IO的进程数量Memory(内存):swpd: 使⽤虚拟内存⼤⼩free: 空闲物理内存⼤⼩buff: ⽤作缓冲的内存⼤⼩cache: ⽤作缓存的内存⼤⼩Swap:si: 每秒从交换区写到内存的⼤⼩,由磁盘调⼊内存so: 每秒写⼊交换区的内存⼤⼩,由内存调⼊磁盘IO:bi: 每秒读取的块数bo: 每秒写⼊的块数system:in: 每秒中断数,包括时钟中断。

cs: 每秒上下⽂切换数。

CPU(以百分⽐表⽰):us: ⽤户进程执⾏时间百分⽐(user time)sy: 内核系统进程执⾏时间百分⽐(system time)wa: IO等待时间百分⽐id: 空闲时间百分⽐5.查看端⼝占⽤情况命令为 lsof -i将会显⽰命令 + 进程ID + 进程所属⽤户, 以及监听的协议、状态等信息注意: 若提⽰⽆此命令, 则需要安装, 命令如下:[root@onepiece ~]# lsof -i-bash: lsof: command not found[root@onepiece ~]# yum install -y lsof......Installed:lsof.x86_64 0:4.87-6.el7Complete!# 出现上述的 "Complete!",说明安装成功。

java内存使用情况的命令 -回复

java内存使用情况的命令 -回复

java内存使用情况的命令-回复Java是一种面向对象的编程语言,由于其良好的跨平台性和动态性能,在各种应用开发中被广泛使用。

Java虚拟机(JVM)是Java语言的核心组成部分,它负责在运行时执行Java字节码。

在进行Java程序开发时,了解和监控Java程序的内存使用情况是非常重要的,因为内存管理直接影响程序的性能和稳定性。

本文将介绍几个常用的命令,用于监控和调试Java程序的内存使用情况。

1. jps:jps命令用于列出正在运行的Java进程的进程ID和主类名称。

在命令行中输入jps,将显示运行中的Java进程列表。

通过查看进程ID,可以确定要监控的Java进程。

2. jstat:jstat命令用于监控Java虚拟机的各种运行时统计信息,包括垃圾收集、类装载、编译等情况。

在命令行中输入jstat -gc 进程ID,将显示与垃圾收集相关的信息,如堆内存使用、垃圾收集时间等。

3. jmap:jmap命令用于生成Java堆转储快照,可以通过转储文件分析Java堆内存使用情况。

在命令行中输入jmap -heap 进程ID,将显示Java 堆内存的详细信息,如堆大小、已使用大小、垃圾收集器类型等。

4. jhat:jhat命令用于分析jmap生成的Java堆转储快照文件。

在命令行中输入jhat 堆转储文件路径,然后在浏览器中打开5. jstack:jstack命令用于生成Java线程的堆栈转储快照,可以用于分析线程死锁等问题。

在命令行中输入jstack 进程ID,将显示Java进程中所有线程的堆栈信息,包括线程状态、锁信息等。

除了以上这些命令外,还可以使用一些第三方工具来监控Java程序的内存使用情况,如VisualVM、jconsole等。

这些工具提供了直观的图形界面,可以实时监控Java虚拟机的各种统计信息,并对内存使用情况进行可视化展示。

在进行Java内存使用监控时,需要注意以下几点:1. 根据实际需求选择合适的命令和工具。

Linux查看CPU和内存使用情况查看jvm内存使用情况

Linux查看CPU和内存使用情况查看jvm内存使用情况

Linux查看CPU和内存使用情况查看jvm内存使用情况在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。

在 CentOS 中,可以通过top 命令来查看 CPU 使用状况。

运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。

接下来是WTT为大家收集的Linux查看CPU和内存使用情况,欢迎大家阅读:Linux查看CPU和内存使用情况操作实例:在命令行中输入“top”即可启动 toptop 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。

第一部分 -- 最上部的系统信息栏:第一行(top):“00:11:04”为系统当前时刻;“3:35”为系统启动后到现在的运作时间;“2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;“load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU数目时,CPU 将比较吃力的负载当前系统所包含的进程;第二行(Tasks):“59 total”为当前系统进程总数;“1 running”为当前运行中的进程数;“58 sleeping”为当前处于等待状态中的进程数;“0 stoped”为被停止的系统进程数;“0 zombie”为被复原的进程数;第三行(Cpus):分别表示了 CPU 当前的使用率;第四行(Mem):分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;第五行(Swap):表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。

通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

测量Java应用程序的CPU和内存占用率 3

测量Java应用程序的CPU和内存占用率 3

JNI里有两个特殊的函数——JNI_OnLoad和JNI_OnUnload,它们分别在加载和卸载库的时候被调用。

JNI_OnLoad在调用其他任何方法之前被执行,而且能够很方便地用于初始化在这一进程的生命周期中没有发生变化的变量,并用于协调JNI规范的版本。

在默认情况下,库会测量它自己的进程的参数,但是通过调用systemInformation.setPid()方法它可以从Java 应用程序被重载。

s_PID C变量用来保存PID,而s_currentProcess用来保存进程句柄(用于Windows的是HANDLE类型,而用于Solaris的是int类型)。

为了读取的一些参数,应该首先打开进程句柄,我们需要在库关闭使用的时候停止同一个进程句柄(通常它在JVM因为相同的原因而关闭的时候发生)。

这就是JNI_OnUnload()函数起作用的地方。

但是,JVM 的一些实现事实上没有调用JNI_OnUnload(),还有发生句柄会永远打开的危险。

为了降低这种可能性,我们应该在Java应用程序里加入一个明确调用detachProcess()C函数的关闭挂钩。

下面就是我们加入关闭挂钩的方法:if (pid!=-1) {int result = SystemInformation.setPid(pid);if (result!=0) {return;}hasPid = true;// Create shutdown hook for proper process detachRuntime.getRuntime().addShutdownHook(new Thread() {public void run() {SystemInformation.detachProcess();}});}通过调用WinAPI里的GetSystemInfo(),我们还可以获得关于中央处理器的一些信息。

只要它是CPU的占用率根据这个值来调节,测量进程最重要的值就是处理器的个数(s_numberOfProcessors)。

编程获取系统当前cpu使用率空闲率、内存使用率、剩余可用内存等

编程获取系统当前cpu使用率空闲率、内存使用率、剩余可用内存等

编程获取系统当前cpu使⽤率空闲率、内存使⽤率、剩余可⽤内存等编程获取系统当前cpu使⽤率/空闲率、内存使⽤率、剩余可⽤内存等2008年06⽉05⽇星期四 16:58得到cpu占有率的API函数:GetSystemTimes得到内存使⽤情况的API函数:GlobalMemoryStatusEx FunctionRetrieves information about the system's current usage of both physical and virtual memory.GetPerformanceInfo FunctionRetrieves the performance values contained in the PERFORMANCE_INFORMATION structure获取特定程序的内存使⽤情况⽤:GetProcessMemoryInfo FunctionRetrieves information about the memory usage of the specified process.我写的⼀个cpu使⽤率例⼦:#define _WIN32_WINNT 0x0501#include <Windows.h>#include <iostream>using namespace std;__int64 CompareFileTime ( FILETIME time1, FILETIME time2 ){__int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime ;__int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime ;return (b - a);}void main(){HANDLE hEvent;BOOL res ;FILETIME preidleTime;FILETIME prekernelTime;FILETIME preuserTime;FILETIME idleTime;FILETIME kernelTime;FILETIME userTime;res = GetSystemTimes( &idleTime, &kernelTime, &userTime );preidleTime = idleTime;prekernelTime = kernelTime;preuserTime = userTime ;hEvent = CreateEvent (NULL,FALSE,FALSE,NULL); // 初始值为 nonsignaled ,并且每次触发后⾃动设置为nonsignaledwhile (1){WaitForSingleObject( hEvent,1000 ); //等待500毫秒res = GetSystemTimes( &idleTime, &kernelTime, &userTime );int idle = CompareFileTime( preidleTime,idleTime);int kernel = CompareFileTime( prekernelTime, kernelTime);int user = CompareFileTime(preuserTime, userTime);int cpu = (kernel +user - idle) *100/(kernel+user);int cpuidle = ( idle) *100/(kernel+user);cout << "CPU利⽤率:" << cpu << "%" << " CPU空闲率:" <<cpuidle << "%" <<endl;preidleTime = idleTime;prekernelTime = kernelTime;preuserTime = userTime ;}}运⾏效果如图:MSDN中获取内存使⽤情况的例⼦:Example Code [C++]The following code shows a simple use of the GlobalMemoryStatusEx function. // Sample output:// There is 51 percent of memory in use.// There are 2029968 total Kbytes of physical memory.// There are 987388 free Kbytes of physical memory.// There are 3884620 total Kbytes of paging file.// There are 2799776 free Kbytes of paging file.// There are 2097024 total Kbytes of virtual memory.// There are 2084876 free Kbytes of virtual memory.// There are 0 free Kbytes of extended memory.#include <windows.h>#include <stdio.h>// Use to convert bytes to KB#define DIV 1024// Specify the width of the field in which to print the numbers.// The asterisk in the format specifier "%*I64d" takes an integer// argument and uses it to pad and right justify the number.#define WIDTH 7void main(int argc, char *argv[]){MEMORYSTATUSEX statex;statex.dwLength = sizeof (statex);GlobalMemoryStatusEx (&statex);printf ("There is %*ld percent of memory in use.\n",WIDTH, statex.dwMemoryLoad);printf ("There are %*I64d total Kbytes of physical memory.\n",WIDTH, statex.ullTotalPhys/DIV);printf ("There are %*I64d free Kbytes of physical memory.\n",WIDTH, statex.ullAvailPhys/DIV);printf ("There are %*I64d total Kbytes of paging file.\n",WIDTH, statex.ullTotalPageFile/DIV);printf ("There are %*I64d free Kbytes of paging file.\n",WIDTH, statex.ullAvailPageFile/DIV);printf ("There are %*I64d total Kbytes of virtual memory.\n",WIDTH, statex.ullTotalVirtual/DIV);printf ("There are %*I64d free Kbytes of virtual memory.\n",WIDTH, statex.ullAvailVirtual/DIV);WIDTH, statex.ullAvailVirtual/DIV);// Show the amount of extended memory available.printf ("There are %*I64d free Kbytes of extended memory.\n",WIDTH, statex.ullAvailExtendedVirtual/DIV);}MSDN中获取特定程序内存使⽤情况的例⼦:Collecting Memory Usage Information For a ProcessTo determine the efficiency of your application, you may want to examine its memory usage. The following sample code uses the GetProcessMemory Info function to obtain information about the memory usage of a process.Copy Code#include <windows.h>#include <stdio.h>#include <psapi.h>void PrintMemoryInfo( DWORD processID ){HANDLE hProcess;PROCESS_MEMORY_COUNTERS pmc;// Print the process identifier.printf( "\nProcess ID: %u\n", processID );// Print information about the memory usage of the process.hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE, processID );if (NULL == hProcess)return;if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) ){printf( "\tPageFaultCount: 0x%08X\n", pmc.PageFaultCount );printf( "\tPeakWorkingSetSize: 0x%08X\n",pmc.PeakWorkingSetSize );printf( "\tWorkingSetSize: 0x%08X\n", pmc.WorkingSetSize );printf( "\tQuotaPeakPagedPoolUsage: 0x%08X\n",pmc.QuotaPeakPagedPoolUsage );printf( "\tQuotaPagedPoolUsage: 0x%08X\n",pmc.QuotaPagedPoolUsage );printf( "\tQuotaPeakNonPagedPoolUsage: 0x%08X\n",pmc.QuotaPeakNonPagedPoolUsage );printf( "\tQuotaNonPagedPoolUsage: 0x%08X\n",pmc.QuotaNonPagedPoolUsage );printf( "\tPagefileUsage: 0x%08X\n", pmc.PagefileUsage );printf( "\tPeakPagefileUsage: 0x%08X\n",pmc.PeakPagefileUsage );}CloseHandle( hProcess );}int main( ){// Get the list of process identifiers.DWORD aProcesses[1024], cbNeeded, cProcesses;unsigned int i;if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )return 1;// Calculate how many process identifiers were returned.cProcesses = cbNeeded / sizeof(DWORD);// Print the memory usage for each processfor ( i = 0; i < cProcesses; i++ )PrintMemoryInfo( aProcesses[i] );return 0;}The main function obtains a list of processes by using the EnumProcesses function. For each process, main calls the PrintMemoryInfo function, passi ng the process identifier. PrintMemoryInfo in turn calls the OpenProcess function to obtain the process handle. If OpenProcess fails, the output sho ws only the process identifier. For example, OpenProcess fails for the Idle and CSRSS processes because their access restrictions prevent user-level code from opening them. Finally, PrintMemoryInfo calls the GetProcessMemoryInfo function to obtain the memory usage informa tion.。

java获得CPU使用率

java获得CPU使用率

java获得CPU使用率,系统内存,虚拟机内存等情况(不用JNI)2009年10月23日星期五16:30在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,下面例子可以取得这些信息,并且获得在Windows下的内存使用率。

首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:package com.hmw.system.monitor;public class MonitorInfoBean {/** 可使用内存. */private long totalMemory;/** 剩余内存. */private long freeMemory;/** 最大可使用内存. */private long maxMemory;/** 操作系统. */private String osName;/** 总的物理内存. */private long totalMemorySize;/** 剩余的物理内存. */private long freePhysicalMemorySize;/** 已使用的物理内存. */private long usedMemory;/** 线程总数. */private int totalThread;/** cpu使用率. */private double cpuRatio;public long getFreeMemory() {return freeMemory;}public void setFreeMemory(long freeMemory) {this.freeMemory = freeMemory;}public long getFreePhysicalMemorySize() {return freePhysicalMemorySize;}public void setFreePhysicalMemorySize(long freePhysicalMemorySize) { this.freePhysicalMemorySize = freePhysicalMemorySize;}public long getMaxMemory() {return maxMemory;}public void setMaxMemory(long maxMemory) {this.maxMemory = maxMemory;}public String getOsName() {return osName;}public void setOsName(String osName) {this.osName = osName;}public long getTotalMemory() {return totalMemory;}public void setTotalMemory(long totalMemory) {this.totalMemory = totalMemory;}public long getTotalMemorySize() {return totalMemorySize;}public void setTotalMemorySize(long totalMemorySize) { this.totalMemorySize = totalMemorySize;}public int getTotalThread() {return totalThread;}public void setTotalThread(int totalThread) {this.totalThread = totalThread;}public long getUsedMemory() {return usedMemory;}public void setUsedMemory(long usedMemory) {edMemory = usedMemory;}public double getCpuRatio() {return cpuRatio;}public void setCpuRatio(double cpuRatio) {this.cpuRatio = cpuRatio;}}接着编写一个获得当前的监控信息的接口,该类的代码如下所示:package com.hmw.system.monitor;/*** 获取系统信息的业务逻辑类接口.*/public interface IMonitorService {/*** 获得当前的监控对象.* @return 返回构造好的监控对象* @throws Exception*/public MonitorInfoBean getMonitorInfoBean() throws Exception; }该类的实现类MonitorServiceImpl如下所示:package com.hmw.system.monitor;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.LineNumberReader;import java.util.StringTokenizer;import sun.management.ManagementFactory;import com.sun.management.OperatingSystemMXBean;/**** 获取系统信息的业务逻辑实现类.** @author GuoHuang*/public class MonitorServiceImpl implements IMonitorService { private static final int CPUTIME = 30;private static final int PERCENT = 100;private static final int FAULTLENGTH = 10;private static String linuxVersion = null;/*** 获得当前的监控对象.** @return 返回构造好的监控对象* @throws Exception* @author GuoHuang*/public MonitorInfoBean getMonitorInfoBean() throws Exception { int kb = 1024;// 可使用内存long totalMemory = Runtime.getRuntime().totalMemory() / kb; // 剩余内存long freeMemory = Runtime.getRuntime().freeMemory() / kb;// 最大可使用内存long maxMemory = Runtime.getRuntime().maxMemory() / kb; OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();// 操作系统String osName = System.getProperty("");// 总的物理内存long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;// 剩余的物理内存long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;// 已使用的物理内存long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb.getFreePhysicalMemorySize()) / kb;// 获得线程总数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 = this.getCpuRatioForWindows();} else {cpuRatio = getCpuRateForLinux();}// 构造返回对象MonitorInfoBean infoBean = new MonitorInfoBean();infoBean.setFreeMemory(freeMemory);infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize); infoBean.setMaxMemory(maxMemory);infoBean.setOsName(osName);infoBean.setTotalMemory(totalMemory);infoBean.setTotalMemorySize(totalMemorySize);infoBean.setTotalThread(totalThread);infoBean.setUsedMemory(usedMemory);infoBean.setCpuRatio(cpuRatio);return infoBean;}private static double getCpuRateForLinux() {InputStream is = null;InputStreamReader isr = null;BufferedReader brStat = null;StringTokenizer tokenStat = null;try {System.out.println("Get usage rate of CUP , linux version: " + linuxVersion); Process process = Runtime.getRuntime().exec("top -b -n 1");is = process.getInputStream();isr = new InputStreamReader(is);brStat = new BufferedReader(isr);if (linuxVersion.equals("2.4")) {brStat.readLine();brStat.readLine();brStat.readLine();brStat.readLine();tokenStat = new StringTokenizer(brStat.readLine()); tokenStat.nextToken();tokenStat.nextToken();String user = tokenStat.nextToken();tokenStat.nextToken();String system = tokenStat.nextToken();tokenStat.nextToken();String nice = tokenStat.nextToken();System.out.println(user + " , " + system + " , " + nice); user = user.substring(0, user.indexOf("%"));system = system.substring(0, system.indexOf("%")); nice = nice.substring(0, nice.indexOf("%"));float userUsage = new Float(user).floatValue();float systemUsage = new Float(system).floatValue(); float niceUsage = new Float(nice).floatValue();return (userUsage + systemUsage + niceUsage) / 100; } else {brStat.readLine();brStat.readLine();tokenStat = new StringTokenizer(brStat.readLine());tokenStat.nextToken();tokenStat.nextToken();tokenStat.nextToken();tokenStat.nextToken();tokenStat.nextToken();tokenStat.nextToken();tokenStat.nextToken();String cpuUsage = tokenStat.nextToken();System.out.println("CPU idle : " + cpuUsage);Float usage = new Float(cpuUsage.substring(0, cpuUsage.indexOf("%")));return (1 - usage.floatValue() / 100);}} catch (IOException ioe) {System.out.println(ioe.getMessage());freeResource(is, isr, brStat);return 1;} finally {freeResource(is, isr, brStat);}}private static void freeResource(InputStream is, InputStreamReader isr, BufferedReader br) {try {if (is != null)is.close();if (isr != null)isr.close();if (br != null)br.close();} catch (IOException ioe) {System.out.println(ioe.getMessage());}}/*** 获得CPU使用率.** @return 返回cpu使用率* @author GuoHuang*/private double getCpuRatioForWindows() {try {String procCmd = System.getenv("windir") + "\\system32\\wbem\\wmic.exe process getCaption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount // 取进程信息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;}}/*** 读取CPU信息.* @param proc* @return* @author GuoHuang*/private 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;}// 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperationString caption = Bytes.substring(line, capidx, cmdidx - 1).trim();String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();if (cmd.indexOf("wmic.exe") >= 0) {continue;}String s1 = Bytes.substring(line, kmtidx, rocidx - 1).trim();String s2 = Bytes.substring(line, umtidx, wocidx - 1).trim();if (caption.equals("System Idle Process") || caption.equals("System")) {if (s1.length() > 0)idletime += Long.valueOf(s1).longValue();if (s2.length() > 0)idletime += Long.valueOf(s2).longValue();continue;}if (s1.length() > 0)kneltime += Long.valueOf(s1).longValue();if (s2.length() > 0)usertime += Long.valueOf(s2).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;}/*** 测试方法.** @param args* @throws Exception* @author GuoHuang*/public static void main(String[] args) throws Exception {IMonitorService service = new MonitorServiceImpl();MonitorInfoBean monitorInfo = service.getMonitorInfoBean();System.out.println("cpu占有率=" + monitorInfo.getCpuRatio());System.out.println("可使用内存=" + monitorInfo.getTotalMemory());System.out.println("剩余内存=" + monitorInfo.getFreeMemory());System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory());System.out.println("操作系统=" + monitorInfo.getOsName());System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb");System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb");System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb");System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb");}}该实现类中需要用到一个自己编写byte的工具类,该类的代码如下所示:package com.hmw.system.monitor;/*** byte操作类.*/public class Bytes {/*** 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在包含汉字的字符串时存在隐患,现调整如下:** @param src 要截取的字符串* @param start_idx 开始坐标(包括该坐标)* @param end_idx 截止坐标(包括该坐标)* @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;}}运行下MonitorBeanImpl类,读者将会看到当前的内存、cpu利用率等信息。

Linux终端命令to查看系统资源使用情况

Linux终端命令to查看系统资源使用情况

Linux终端命令to查看系统资源使用情况Linux终端命令:查看系统资源使用情况Linux是一种免费且开源的操作系统,广泛用于服务器和嵌入式设备。

Linux终端提供了许多命令来管理和监控系统资源的使用情况。

本文将介绍几个常用的Linux终端命令,用于查看系统CPU、内存和磁盘的使用情况。

1. 查看CPU使用情况可以使用top命令来实时监控系统的CPU使用情况。

在终端输入以下命令:```top```执行该命令后,会显示一个实时更新的进程列表,其中包括每个进程的CPU占用百分比、内存占用等信息。

可以按下键盘上的“q”来退出top命令。

此外,还可以使用mpstat命令来查看每个CPU核心的使用率。

在终端输入以下命令:```mpstat -P ALL```执行该命令后,会显示每个CPU核心的使用率、用户态和内核态的CPU时间等信息。

2. 查看内存使用情况可以使用free命令来查看系统的内存使用情况。

在终端输入以下命令:```free -h```执行该命令后,会显示系统的总内存、已使用内存、空闲内存等信息。

选项“-h”用于以人类可读的方式显示内存大小。

另外,还可以使用top命令来查看系统的内存占用情况。

在top命令的进程列表中,可以查看每个进程的内存占用情况。

3. 查看磁盘使用情况可以使用df命令来查看文件系统的磁盘使用情况。

在终端输入以下命令:```df -h```执行该命令后,会显示文件系统的挂载点、总容量、已使用容量、可用容量等信息。

选项“-h”用于以人类可读的方式显示磁盘大小。

另外,可以使用du命令来查看指定目录或文件的磁盘使用情况。

在终端输入以下命令:```du -h <目录或文件路径>```执行该命令后,会显示指定目录或文件的磁盘占用大小。

选项“-h”用于以人类可读的方式显示磁盘大小。

4. 查看网络使用情况可以使用nethogs命令来查看系统的网络使用情况。

在终端输入以下命令:```nethogs```执行该命令后,会显示每个进程的网络带宽占用情况,包括上传和下载的数据量。

java获取linux系统cpu信息的方法

java获取linux系统cpu信息的方法

java获取linux系统cpu信息的方法要获取Linux系统的CPU信息,可以使用以下几种方法。

1.使用命令行工具-使用`cat /proc/cpuinfo`命令可以查看CPU的详细信息,包括型号、频率、核心数、缓存等。

-使用`lscpu`命令可以获取CPU的一些常见统计信息,如体系架构、字长、主频等。

-使用`top`命令可以实时查看系统的CPU使用率、进程状态等信息。

2.使用Java代码可以使用Java的ProcessBuilder类来执行命令行命令,并通过读取命令的输出获取CPU信息。

以下是一个示例代码:```javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.nio.charset.StandardCharsets;public class GetCpuInfo {public static void main(String[] args) {String command = "cat /proc/cpuinfo";try {ProcessBuilder processBuilder = newProcessBuilder(command);Process process = processBuilder.start();InputStream inputStream = process.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}}```此代码使用了ProcessBuilder来执行命令,并通过输入流读取命令输出的内容,然后逐行打印出来。

java代码读取linux主机的磁盘使用信息,同时截取出文件系统和已使用情况

java代码读取linux主机的磁盘使用信息,同时截取出文件系统和已使用情况

1.packagecom.cmmb.util;2.3.import java.io.*;4.5.6./**7. * linux下cpu内存磁盘jvm的使用监控8. * @author avery_leo9. *10. */11.public class DiskSpace {12. /**13. * 获取cpu使用情况14. * @return15. * @throws Exception16. */17. public double getCpuUsage() throws Exception {18. doublecpuUsed = 0;19.20. Runtime rt = Runtime.getRuntime();21. Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令22.23.24. BufferedReader in = null;25. try {26. in = new BufferedReader(new InputStreamReader(p.getInputStream()));27. String str = null;28. String[] strArray = null;29.30. while ((str = in.readLine()) != null) {31. int m = 0;32.33. if (str.indexOf(" R ") != -1) {// 只分析正在运行的进程,top进程本身除外&&34.35. strArray = str.split(" ");36. for (String tmp : strArray) {37. if (tmp.trim().length() == 0)38. continue;39. if (++m == 9) {// 第9列为CPU的使用百分比(RedHat40.41. cpuUsed += Double.parseDouble(tmp);42.43. }44.45. }46.47. }48. }49. } catch (Exception e) {50. e.printStackTrace();51. } finally {52. in.close();53. }54. returncpuUsed;55. }56. /**57. * 内存监控58. * @return59. * @throws Exception60. */61. public double getMemUsage() throws Exception {62.63. doublemenUsed = 0;64. Runtime rt = Runtime.getRuntime();65. Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令66.67.68. BufferedReader in = null;69. try {70. in = new BufferedReader(new InputStreamReader(p.getInputStream()));71. String str = null;72. String[] strArray = null;73.74. while ((str = in.readLine()) != null) {75. int m = 0;76.77. if (str.indexOf(" R ") != -1) {// 只分析正在运行的进程,top进程本身除外&&78. //79. // System.out.println("------------------3-----------------");80. strArray = str.split(" ");81. for (String tmp : strArray) {82. if (tmp.trim().length() == 0)83. continue;84.85. if (++m == 10) {86. // 9)--第10列为mem的使用百分比(RedHat 9)87.88. menUsed += Double.parseDouble(tmp);89.90. }91. }92.93. }94. }95. } catch (Exception e) {96. e.printStackTrace();97. } finally {98. in.close();99. }100. returnmenUsed;101. }102.103. /**104. * 获取磁盘空间大小105. *106. * @return107. * @throws Exception108. */109. public double getDeskUsage() throws Exception {110. doubletotalHD = 0;111. doubleusedHD = 0;112. Runtime rt = Runtime.getRuntime();113. Process p = rt.exec("df -hl /home");//df -hl 查看硬盘空间114.115.116.117. BufferedReader in = null;118. try {119. in = new BufferedReader(new InputStreamReader(p.getInputStream()));120. String str = null;121. String[] strArray = null;122. while ((str = in.readLine()) != null) {123. int m = 0;124. strArray = str.split(" ");125. for (String tmp : strArray) {126. if (tmp.trim().length() == 0)127. continue;128. ++m;129. System.out.println("----tmp----" + tmp);130. if (tmp.indexOf("G") != -1) {131. if (m == 2) {132. System.out.println("---G----" + tmp);133. if (!tmp.equals("") && !tmp.equals("0"))134. totalHD += Double.parseDouble(tmp135. .substring(0, tmp.length() - 1)) * 1024; 136.137. }138. if (m == 3) {139. System.out.println("---G----" + tmp);140. if (!tmp.equals("none") && !tmp.equals("0")) 141. usedHD += Double.parseDouble(tmp.substring( 142. 0, tmp.length() - 1)) * 1024;143.144. }145. }146. if (tmp.indexOf("M") != -1) {147. if (m == 2) {148. System.out.println("---M---" + tmp);149. if (!tmp.equals("") && !tmp.equals("0"))150. totalHD += Double.parseDouble(tmp151. .substring(0, tmp.length() - 1)); 152.153. }154. if (m == 3) {155. System.out.println("---M---" + tmp);156. if (!tmp.equals("none") && !tmp.equals("0")) 157. usedHD += Double.parseDouble(tmp.substring( 158. 0, tmp.length() - 1));159. System.out.println("----3----" + usedHD);160. }161. }162.163. }164.165. }166. } catch (Exception e) {167. e.printStackTrace();168. } finally {169. in.close();170. }171. //上面写在userd和total写反了,懒得改了,就反着用了172. System.out.println("----totalHD----" + usedHD);173. System.out.println("----usedHD----" + totalHD);174. return (totalHD / usedHD) * 100;175. }176.177.178. public static void main(String[] args) throws Exception {179. DiskSpacecpu = new DiskSpace();180. System.out.println("---------------cpu used:" + cpu.getCpuUsage() + "%"); 181. System.out.println("---------------mem used:" + cpu.getMemUsage() + "%"); 182. System.out.println("---------------HD used:" + cpu.getDeskUsage() + "%"); 183. System.out.println("------------jvm监控----------------------");184.185. Runtime lRuntime = Runtime.getRuntime();186. System.out.println("--------------Free Momery:" + lRuntime.freeMemory()+"K"); 187. System.out.println("--------------Max Momery:" + lRuntime.maxMemory()+"K");188. System.out.println("--------------Total Momery:" + lRuntime.totalMemory()+"K"); 189. System.out.println("---------------Available Processors :"190. + lRuntime.availableProcessors());191. }192.}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 获取Linux 和Window 系统CPU、内存和磁盘总使用率的情况
2017/05/08 0 这是一个工具类,获取的内容:
CPU 使用率:得到的是当前CPU 的使用情况,这是算出的是两次500 毫秒时间
差的CPU 使用率
内存使用率:[1 - 剩余的物理内存/(总的物理内存+虚拟内存) ] * 100
磁盘总使用率:[1 - 磁盘空余大小/磁盘总大小] * 100
下面开始贴代码:使用暂时没有发现什么问题,如果有问题,咱们可以一起讨论package com.util;
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.LineNumberReader;import ng.management.ManagementFactory;import java.math.BigDecimal;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.StringTokenizer;
import org.apache.log4j.Logger;
import com.sun.management.OperatingSystemMXBean;
public class ComputerMonitorUtil {
private static String osName = System.getProperty(“”);private static final int CPUTIME = 500;private static final int PERCENT = 100;private static final int FAULTLENGTH = 10;private static final Logger logger = Logger.getLogger(ComputerMonitorUtil.class);
/** * 功能:获取Linux 和Window 系统cpu 使用率* */public static double getCpuUsage() {// 如果是window 系统if (osName.toLowerCase().contains(“windows”)||osName.toLowerCase().contains(“win”)) {try {String procCmd = System.getenv(“windir”)+“//system32//wbem//wmic.exe process get
Caption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTi。

相关文档
最新文档