Java 使用oshi獲取當前服務器狀態cpu、內存、存儲等核心信息

文章目錄

  • 簡介
  • 相關資料
  • maven依賴
  • oshi-官方示例
  • 獲取CUP信息代碼
  • 獲取內存信息
  • 獲取磁盤信息

簡介

OSHI 是基于 JNA 的(本地)操作系統和硬件信息庫。它不需要安裝任何其他額外的本地庫,旨在提供一種跨平臺的實現來檢索系統信息,例如操作系統版本、進程、內存和 CPU 使用率、磁盤和分區、設備、傳感器等。

使用 OSHI 可以對應用程序進行監控,可以對應用程序所在的服務器資源進行監控,還可以監控到其他許多指標,如下:

1、計算機系統和固件,底板
2、操作系統和版本 / 內部版本
3、物理(核心)和邏輯(超線程)CPU,處理器組,NUMA 節點
4、系統和每個處理器的負載百分比和滴答計數器
5、CPU 正常運行時間,進程和線程
6、進程正常運行時間,CPU,內存使用率,用戶 / 組,命令行
7、已使用 / 可用的物理和虛擬內存
8、掛載的文件系統(類型,可用空間和總空間)
9、磁盤驅動器(型號,序列號,大小)和分區
10、網絡接口(IP,帶寬輸入 / 輸出)
11、電池狀態(電量百分比,剩余時間,電量使用情況統計信息)
12、連接的顯示器(帶有 EDID 信息)
13、USB 設備
14、傳感器(溫度,風扇速度,電壓)

支持的平臺:

Windows
Linux
macOS
UNIX (AIX, FreeBSD, OpenBSD, Solaris)

相關資料

github 地址:https://github.com/oshi/oshi
API 文檔:http://oshi.github.io/oshi/apidocs/

maven依賴

       <dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>6.3.2</version></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.12.1</version></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna-platform</artifactId><version>5.12.1</version></dependency>

在這里插入圖片描述

oshi-官方示例

此外,該oshi-demo模塊包括一個OshiGui類,它實現了一個基本的 Swing GUI,為在 UI、監控或警報應用程序中使用 OSHI 的潛在可視化提供建議,如下所示。有關基于此方法的更高級 GUI,請參閱MooInfo 項目。

獲取CUP信息代碼

獲取時與windows窗口等查看CUP利用率的信息有差異,本身CUP利用率存在很大的波動。

public static CpuEntity getCpu() throws InterruptedException {SystemInfo systemInfo = new SystemInfo();GlobalConfig.set(GlobalConfig.OSHI_OS_WINDOWS_CPU_UTILITY, Boolean.TRUE);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;CpuEntity cpuEntity = new CpuEntity();cpuEntity.setSys(new DecimalFormat("#.##").format(cSys * 1.0 / totalCpu));cpuEntity.setUser(new DecimalFormat("#.##").format(user * 1.0 / totalCpu));cpuEntity.setWait(new DecimalFormat("#.##").format(iowait * 1.0 / totalCpu));cpuEntity.setWait(new DecimalFormat("#.##").format(idle * 1.0 / totalCpu));//  user + system + nice + iowait + irq + softirq + steallong cpuUtilization = user + nice + cSys + iowait + irq + softirq + steal;cpuEntity.setCombined(new DecimalFormat("#.##").format((cpuUtilization * 1.0 / totalCpu)*100));return cpuEntity;}

獲取內存信息

    public static MemoryEntity getMemory() {OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();MemoryEntity memoryEntity = new MemoryEntity();memoryEntity.setMemTotal(osmxb.getTotalPhysicalMemorySize() / 1024 / 1024 / 1024);memoryEntity.setMemUsed((osmxb.getTotalPhysicalMemorySize() - osmxb.getFreePhysicalMemorySize()) / 1024 / 1024 / 1024);return memoryEntity;}

獲取磁盤信息

  			File[] roots = File.listRoots();Long useSum = 0l;Long totalSum = 0l;for (File file : roots) {long free = file.getFreeSpace();long total = file.getTotalSpace();long use = total - free;useSum += change(use);totalSum += change(total);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209463.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[ROS2] --- action

1 action介紹 ROS通信機制也會被常常用到——那就是動作。從這個名字上就可以很好理解這個概念的含義&#xff0c;這種通信機制的目的就是便于對機器人某一完整行為的流程進行管理。 1.1 客戶端/服務器模型 動作和服務類似&#xff0c;使用的也是客戶端和服務器模型&#xf…

數據結構中處理散列沖突的四種方法

1 開放定址法 1.1 定義 開放定址法就是一旦發生了沖突&#xff0c;就去尋找下一個空的散列地址 1.2 要求 只要散列表足夠大 空的散列地址總能找到&#xff0c;并將記錄存入 1.3 線性探測法 使用該公式用于解決沖突的開放定址法稱為線性探測法 對于線性探測法&#xff0c…

【異常】SpringBoot3.2.0 Description: Failed to configure a DataSource: ‘url‘ att

mybatisPlus 多數據源導致 異常 Description:Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the following:If you want an embed…

通過kubeadm方式安裝k8s

虛擬機最少是 2 core&#xff0c;master內存最小3G&#xff0c;node內存最小2G. 要求的Docker版本是18.03&#xff0c;如果不是安裝的docker ce&#xff0c;版本是過舊的&#xff0c;可以選擇刪除后重新安裝&#xff1b; 也可以重新創建一個虛擬機執行以下命令。 簡單方法&am…

線性代數基礎【1】行列式

第一節 行列式的基本概念和性質 一、基本概念 ①逆序 1,2和2,1是一對逆序 ②逆序數 1,2,3,5,4的逆序數為1;1,3,2,5,4逆序數為4; ③行列式 ④余子數和代數余子數 行列式挖掉一個數(例如aij),將原行列式去掉i行j列的行列式M,則M為余子數,代數余子數記為Aij,如果(ij)為偶數…

云LIS實驗室信息管理系統源碼——實驗室信息管理解決方案

云LIS&#xff08;Cloud Laboratory Information System&#xff09;是一種為區域醫療提供臨床實驗室信息服務的計算機應用程序&#xff0c;其主要功能是協助區域內所有臨床實驗室相互協調并完成日常檢驗工作&#xff0c;對區域內的檢驗數據進行集中管理和共享&#xff0c;通過…

uniapp引入插件市場echarts圖表(l-echart)實現小程序端圖表,并修改源碼簡化使用

使用的uniapp插件:l-echart https://ext.dcloud.net.cn/plugin?id4899 注意事項 1.因為小程序有主包分包大小限制&#xff0c;并且uni_modules中的包也會算在主包體積中&#xff0c;而我項目中的圖表是在分包中使用的&#xff0c;所以我移動uni_modules中的l-echart圖表組件…

Python 的list是...

對 Python list遺憾 sum 對列表執行正確的操作幾乎是不可能的。 my_list list(range(1, 100001))能夠執行 sum()、min() 和 max() 的情況非常罕見。 sum(my_list)5000050000比如mean(), std() &#xff0c;這些也不行。 mean(my_list)----------------------------------…

高通CRM的v4l2驅動模型

概述下crm中v4l2框架的初始化創建流程&#xff1a; 對于CRM主設備的v4l2框架創建過程&#xff1a; 1、分配和初始化v4l2 device對象 2、分配和初始化media device對象&#xff0c;然后將v4l2 device中mdev綁定到media device上 3、分配和初始化video device對象&#xff0c…

Python:核心知識點整理大全9-筆記

目錄 ?編輯 5.2.4 比較數字 5.2.5 檢查多個條件 1. 使用and檢查多個條件 2. 使用or檢查多個條件 5.2.6 檢查特定值是否包含在列表中 5.2.7 檢查特定值是否不包含在列表中 banned_users.py 5.2.8 布爾表達式 5.3 if 語句 5.3.1 簡單的 if 語句 5.3.2 if-else 語句 …

Java中sleep() 和 wait() 有什么區別?

Java中sleep() 和 wait() 有什么區別&#xff1f; sleep() 和 wait() 是兩個在 Java 中用于線程控制的方法&#xff0c;它們有一些重要的區別&#xff1a; 關聯對象&#xff1a; sleep() 是 Thread 類的靜態方法&#xff0c;它讓當前線程休眠指定的時間&#xff0c;不釋放對象…

YOLOv8改進 | 2023 | RCS-OSA替換C2f實現暴力漲點(減少通道的空間對象注意力機制)

一、本文介紹 本文給大家帶來的改進機制是RCS-YOLO提出的RCS-OSA模塊&#xff0c;其全稱是"Reduced Channel Spatial Object Attention"&#xff0c;意即"減少通道的空間對象注意力"。這個模塊的主要功能是通過減少特征圖的通道數量&#xff0c;同時關注空…

Android Studio APK打包指定包名

在最近寫的一個案列中嘗試用最新版的Android studio對項目進行打包測試&#xff0c;想要指定打包的包名這樣便于區分的時候發現以前的許多方法都過時了&#xff0c;查了很多資料才弄明白each被拋棄了。本教程建議先看第三步。 目錄 一、配置根目錄下gradle.build 二、通過bui…

Billu_b0x

信息收集 #正常進行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST Nmap scan report for 192.168.182.142 (192.168.182.142) Host is up (0.00073s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-cookie-flags:…

VSC改造MD編輯器及圖床方案分享

VSC改造MD編輯器及圖床方案分享 用了那么多md編輯器&#xff0c;到頭來還是覺得VSC最好用。這次就來分享一下我的blog文件編輯流吧。 這篇文章包括&#xff1a;VSC下md功能擴展插件推薦、圖床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘圖片…

【電子通識】為什么電阻都是2.2、3.3、4.7、5.1這樣的小數,而不是整數?

剛開始接觸電路設計可能會對市面上已經有的電阻值如&#xff1a;2.2Ω、4.7Ω、5.1Ω、22Ω、47Ω、51Ω&#xff0c;通常都不是整數覺得非常困惑&#xff0c;所以查閱了一些資料&#xff0c;總結如下&#xff1a; 電阻是使用指數分布來設計生產的&#xff0c;即遵循國際電工委…

【CSP】202303-2_墾田計劃Python實現

文章目錄 [toc]試題編號試題名稱時間限制內存限制問題描述輸入格式輸出格式樣例輸入1樣例輸出1樣例解釋樣例輸入2樣例輸出2樣例解釋子任務Python實現 試題編號 202303-2 試題名稱 墾田計劃 時間限制 1.0s 內存限制 512.0MB 問題描述 頓頓總共選中了 n n n塊區域準備開墾田地&a…

基于STM32 + DMA介紹,應用和步驟詳解(ADC多通道)

前言 本篇博客主要學習了解DMA的工作原理和部分寄存器解析&#xff0c;針對ADC多通道來對代碼部分&#xff0c;應用部分作詳細講解&#xff0c;掌握代碼編程原理。本篇博客大部分是自己收集和整理&#xff0c;如有侵權請聯系我刪除。 本次博客開發板使用的是正點原子精英版&am…

23種策略模式之策略模式

文章目錄 前言優缺點使用場景角色定義UML模擬示例小結 前言 在軟件開發中&#xff0c;設計模式是為了解決常見問題而提供的一套可重用的解決方案。策略模式&#xff08;Strategy Pattern&#xff09;是其中一種常見的設計模式&#xff0c;它屬于行為型模式。該模式的核心思想是…

Java程序設計實驗6 | 集合類

*本文是博主對Java各種實驗的再整理與詳解&#xff0c;除了代碼部分和解析部分&#xff0c;一些題目還增加了拓展部分&#xff08;?&#xff09;。拓展部分不是實驗報告中原有的內容&#xff0c;而是博主本人自己的補充&#xff0c;以方便大家額外學習、參考。 &#xff08;解…