java oshi获取服务器各种信息
依赖:
<dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>3.9.1</version>
</dependency>
OSHI可以跨平台查看服务器信息,其中cpu负载信息为当前占用CPU的时间。需要在一段时间内获取两次,然后相减得出这段时间内所占用的时间。这段时间除以总占用时间就是占用百分比。
package io.greatcolin.jvmMessage;import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;import java.text.DecimalFormat;
import java.util.Properties;
import java.util.concurrent.TimeUnit;/*** @author colin.cheng* @version V1.0* @date Created In 16:04 2019/8/16*/
public class OshiTest {public static void main(String[] args) {while (true){try {OshiTest.printlnCpuInfo();OshiTest.MemInfo();OshiTest.getThread();OshiTest.setSysInfo();OshiTest.setJvmInfo();TimeUnit.SECONDS.sleep(5);}catch (Exception e){e.printStackTrace();}}}private static void printlnCpuInfo() throws InterruptedException {//System.out.println("----------------cpu信息----------------");SystemInfo systemInfo = new SystemInfo();CentralProcessor processor = systemInfo.getHardware().getProcessor();long[] prevTicks = processor.getSystemCpuLoadTicks();// 睡眠1sTimeUnit.SECONDS.sleep(1);long[] ticks = processor.getSystemCpuLoadTicks();long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;System.out.println("----------------cpu信息----------------");System.out.println("cpu核数:" + processor.getLogicalProcessorCount());System.out.println("cpu系统使用率:" + new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));System.out.println("cpu用户使用率:" + new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));System.out.println("cpu当前等待率:" + new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));System.out.println("cpu当前使用率:" + new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu)));}public static void MemInfo(){System.out.println("----------------主机内存信息----------------");SystemInfo systemInfo = new SystemInfo();GlobalMemory memory = systemInfo.getHardware().getMemory();//总内存long totalByte = memory.getTotal();//剩余long acaliableByte = memory.getAvailable();System.out.println("总内存 = " + formatByte(totalByte));System.out.println("使用" + formatByte(totalByte-acaliableByte));System.out.println("剩余内存 = " + formatByte(acaliableByte));System.out.println("使用率:" + new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte));}public static void setSysInfo(){System.out.println("----------------操作系统信息----------------");Properties props = System.getProperties();//系统名称String osName = props.getProperty("os.name");//架构名称String osArch = props.getProperty("os.arch");System.out.println("操作系统名 = " + osName);System.out.println("系统架构 = " + osArch);}public static void setJvmInfo(){System.out.println("----------------jvm信息----------------");Properties props = System.getProperties();Runtime runtime = Runtime.getRuntime();//jvm总内存long jvmTotalMemoryByte = runtime.totalMemory();//jvm最大可申请long jvmMaxMoryByte = runtime.maxMemory();//空闲空间long freeMemoryByte = runtime.freeMemory();//jdk版本String jdkVersion = props.getProperty("java.version");//jdk路径String jdkHome = props.getProperty("java.home");System.out.println("jvm内存总量 = " + formatByte(jvmTotalMemoryByte));System.out.println("jvm已使用内存 = " + formatByte(jvmTotalMemoryByte-freeMemoryByte));System.out.println("jvm剩余内存 = " + formatByte(freeMemoryByte));System.out.println("jvm内存使用率 = " + new DecimalFormat("#.##%").format((jvmTotalMemoryByte-freeMemoryByte)*1.0/jvmTotalMemoryByte));System.out.println("java版本 = " + jdkVersion);//System.out.println("jdkHome = " + jdkHome);}public static void getThread(){System.out.println("----------------线程信息----------------");ThreadGroup currentGroup =Thread.currentThread().getThreadGroup();while (currentGroup.getParent()!=null){// 返回此线程组的父线程组currentGroup=currentGroup.getParent();}//此线程组中活动线程的估计数int noThreads = currentGroup.activeCount();Thread[] lstThreads = new Thread[noThreads];//把对此线程组中的所有活动子组的引用复制到指定数组中。currentGroup.enumerate(lstThreads);for (Thread thread : lstThreads) {System.out.println("线程数量:"+noThreads+" 线程id:" + thread.getId() + " 线程名称:" + thread.getName() + " 线程状态:" + thread.getState());}}public static String formatByte(long byteNumber){//换算单位double FORMAT = 1024.0;double kbNumber = byteNumber/FORMAT;if(kbNumber<FORMAT){return new DecimalFormat("#.##KB").format(kbNumber);}double mbNumber = kbNumber/FORMAT;if(mbNumber<FORMAT){return new DecimalFormat("#.##MB").format(mbNumber);}double gbNumber = mbNumber/FORMAT;if(gbNumber<FORMAT){return new DecimalFormat("#.##GB").format(gbNumber);}double tbNumber = gbNumber/FORMAT;return new DecimalFormat("#.##TB").format(tbNumber);}
}
结果
# 没添加slf4j的依赖,不影响
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
----------------cpu信息----------------
cpu核数:4
cpu系统使用率:1.88%
cpu用户使用率:2.73%
cpu当前等待率:0%
cpu当前使用率:4.71%
----------------主机内存信息----------------
总内存 = 7.88GB
使用5.89GB
剩余内存 = 1.99GB
使用率:74.72%
----------------线程信息----------------
线程数量:5 线程id:2 线程名称:Reference Handler 线程状态:WAITING
线程数量:5 线程id:3 线程名称:Finalizer 线程状态:WAITING
线程数量:5 线程id:4 线程名称:Signal Dispatcher 线程状态:RUNNABLE
线程数量:5 线程id:5 线程名称:Attach Listener 线程状态:RUNNABLE
线程数量:5 线程id:1 线程名称:main 线程状态:RUNNABLE
----------------操作系统信息----------------
操作系统名 = Windows 7
系统架构 = amd64
----------------jvm信息----------------
jvm内存总量 = 123MB
jvm已使用内存 = 20.46MB
jvm剩余内存 = 102.54MB
jvm内存使用率 = 16.64%
java版本 = 1.8.0_65
System.getProperties()可获得的所有属性
java的System.getProperty()方法可以获取的值
java oshi获取服务器各种信息相关推荐
- 获取局域网内服务器信息,使用Java代码获取服务器性能信息及局域网内主机名.pdf...
使使用用Java代代码码获获取取服服务务器器性性能能信信息息及及局局域域网网内内主主机机名名 最近做个项目,就是要取 cpu 占有率等等的系统信息,一开始以为要用动态链接库了,但后来发现可以像下面这样 ...
- java 获取远程服务器信息,java 远程获取服务器信息
java 远程获取服务器信息 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JD ...
- PHP 获取服务器详细信息
PHP 获取系统信息,PHP 获取服务器详细信息 获取系统类型及版本号: php_uname() (例:Windows NT ...
- java使用sigar获取服务器的信息
如果我们想要获取服务器的一些基本信息,我们需要如何操作呢? 在java中,我们可以使用sigar来进行实现,sigar能够实现获取服务器运行时的各项状态信息,如:cpu占用率.内存使用情况等 话不多说 ...
- java获取服务器信息吗_java获取服务器一些信息的方法
request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...
- 使用oshi获取服务器的参数信息
背景 最近我们负责的一个电网行业的业务平台,出现了一个非常奇葩的问题.这个项目涉及到软件平台厂家.服务器厂家.存储厂家以及真正的用户等四方关系,而我们主要负责软件平台的研发工作.平台正常运行了2年多了 ...
- php获取服务器相关信息
2019独角兽企业重金招聘Python工程师标准>>> php可以通过相关函数获取服务器和php环境的相关信息 ,如下代码: <html><head>< ...
- php获取服务器数据库信息,PHP获取服务器信息
# 获取服务器信息 ## [PHP交流群:494826865(点击群号立即加群)](https://jq.qq.com/?_wv=1027&k=50Qy5h6) >[success]在做 ...
- 通过SnmpWalk获取服务器状态信息
简单网络管理协议SNMP(Simple Network Management Protocol)是网络监控和网络设备管理的统一 协议,并被所有主流的操作系统和大量网络应用程序所支持.SNMP广泛用于管 ...
最新文章
- php写的接口返回数据的页面,PHP怎么解析 WEBSERVICES接口返回的数据
- 代码参数里的 payload 究竟是什么意思
- RebornDB:下一代分布式Key-Value数据库
- Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果(1)
- 为什么需要DTO(数据传输对象)
- 交换机多少钱一个?影响工业交换机价格的因素?
- 怎么把数据文件上传云服务器,怎么把数据上传导云服务器
- 03|复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
- usb转rj45_超薄本也能有线上网,只需一个USB转网口小工具
- matlab学习笔记(4)
- SpyEye on Android
- 小品: 关于C++引用
- 微信小程序原生实现好看的日期选择插件-万年历
- QSS实践汇总(3)——QComboBox样式(风格)
- OpenDaylight VTN 项目指南
- 用 JS 给图片加文字水印或图片水印
- Source Insight前进和后退(返回上一步)快捷键
- 导入excel时报错The supplied data appears to be in the Office 2007+ XML.
- 冒烟测试(smoke test)、可用性测试(sanity test)和回归测试(regression test)
- 工控服务器什么作用,工控机和服务器有什么区别
热门文章
- 基于java所写的学生选课管理系统
- 《气候宣言》和We Mean Business联盟合作推出全方位行动,助力企业推行更具雄心的碳减排目标
- vlunhub系列之CH4INRULZ
- html当前域名,js取得当前url,javascript获取当前页面url值,js获取域名
- jquery判断ie浏览器版本
- 【转载】ACM计算几何题目推荐
- Oracle密码过期the password has expired解决办法(避坑)
- 放置江湖服务器维护,一款运营两年之久的放置手游,放置江湖了解一下
- cocos2dx中的屏幕大小
- 人工智能基础:迁移学习对抗学习简述