From b3b17b231e2f2840332ce6eb96f791865fdec6d5 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期一, 14 四月 2025 16:38:16 +0800
Subject: [PATCH] 代码优化
---
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/SysCpuUtil.java | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 110 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/SysCpuUtil.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/SysCpuUtil.java
new file mode 100644
index 0000000..5675ae6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/SysCpuUtil.java
@@ -0,0 +1,110 @@
+package com.dy.common.util;
+
+import lombok.Data;
+import oshi.hardware.CentralProcessor;
+import oshi.util.Util;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/8/2 11:17
+ * @Description
+ */
+public class SysCpuUtil {
+
+ private static final int OSHI_WAIT_SECOND = 1000;
+ /**
+ * 寰楀埌CPU淇℃伅
+ */
+ public static CpuInfoVo info(CentralProcessor processor){
+ /**
+ * 鑾峰彇绯荤粺鑼冨洿鍐呯殑CPU璐熻浇璁℃暟鍣ㄣ�傝繑鍥炰竴涓寘鍚叓涓厓绱犵殑鏁扮粍锛岃〃绀哄湪鐢ㄦ埛锛�0锛夈�佸凹鏂紙1锛夈�佺郴缁燂紙2锛夈�佺┖闂诧紙3锛夈��
+ * IOwait锛�4锛夈�佺‖浠朵腑鏂紙IRQ锛夛紙5锛夈�佽蒋浠朵腑鏂�/DPC锛圫oftIRQ锛夛級锛�6锛夋垨绐冨彇锛�7锛夌姸鎬佷笅鑺辫垂鐨勬绉掓暟銆備娇鐢�
+ * {@link-shi.hardware.TickType#getIndex锛堬級}妫�绱㈢浉搴旂殑绱㈠紩銆傞�氳繃娴嬮噺涓�涓椂闂撮棿
+ * 闅斿唴婊寸瓟澹颁箣闂寸殑宸紓锛屽彲浠ヨ绠楀嚭璇ユ椂闂撮棿闅斿唴鐨凜PU璐熻浇銆�
+ * 鍦ㄦ煇浜涢�昏緫澶勭悊鍣ㄦ暟閲忓彲鍙樼殑鎿嶄綔绯荤粺涓婏紝姝ら樀鍒楃殑澶у皬鍙兘浼氬彂鐢熷彉鍖栵紝骞朵笖鍙兘涓庡叾浠栨瘡澶勭悊鍣ㄦ柟娉曚笉涓�鑷淬��
+ * 璇锋敞鎰忥紝铏界劧婊寸瓟璁℃暟鍣ㄤ互姣涓哄崟浣嶏紝浣嗗畠浠彲鑳戒細闅忕潃锛堜緷璧栦簬骞冲彴鐨勶級鏃堕挓婊寸瓟澹颁互鏇村ぇ鐨勫閲忓墠杩涖�備緥濡傦紝榛樿
+ * 鎯呭喌涓嬶紝Windows鏃堕挓鑺傛媿涓�1/64绉掞紙绾�15鎴�16姣锛夛紝Linux鏃堕挓鑺傛媿鍙栧喅浜庡垎甯冨拰閰嶇疆锛屼絾閫氬父涓�1/100绉掞紙10
+ * 姣锛夈��
+ * Windows涓婃病鏈塏ice鍜孖OWait淇℃伅锛宮acOS涓婃病鏈塈OWait鍜孖RQ淇℃伅锛屽洜姝よ繖浜涙爣璁板皢濮嬬粓涓洪浂銆�
+ * 瑕佷娇鐢ㄦ鏂规硶璁$畻鎬荤┖闂叉椂闂达紝璇峰悓鏃跺寘鎷琁dle鍜孖OWait鏍囪銆傚悓鏍凤紝搴斿皢IRQ銆丼oftIRQ鍜孲teal鏍囪娣诲姞鍒扮郴缁熷��
+ * 涓互鑾峰緱鎬诲拰銆傜郴缁熻鏃惰繕鍖呮嫭鎵ц鍏朵粬铏氭嫙涓绘満锛堢獌鍙栵級鐨勬椂闂淬��
+ * *
+ * @return涓�涓敱8涓暱鍊肩粍鎴愮殑鏁扮粍锛岃〃绀哄湪User銆丯ice銆丼ystem銆両dle銆両Owait銆両RQ銆丼oftIRQ鍜孲teal鐘舵�佷笅鑺辫垂鐨勬椂闂淬��
+ */
+ long[] prevTicks = processor.getSystemCpuLoadTicks();
+ Util.sleep(OSHI_WAIT_SECOND);
+ long[] ticks = processor.getSystemCpuLoadTicks();
+ long nice = ticks[1] - prevTicks[1];
+ long irq = ticks[5] - prevTicks[5];
+ long softIrq = ticks[6] - prevTicks[6];
+ long steal = ticks[7] - prevTicks[7];
+ long cSys = ticks[2] - prevTicks[2];
+ long user = ticks[0] - prevTicks[0];
+ long ioWait = ticks[4] - prevTicks[4];
+ long idle = ticks[3] - prevTicks[3];
+
+ /*
+ long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
+ long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
+ long softIrq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
+ long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
+ long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
+ long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
+ long ioWait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
+ long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
+ */
+
+ long totalCpu = user + nice + cSys + idle + ioWait + irq + softIrq + steal;
+
+ CpuInfoVo vo = new CpuInfoVo() ;
+ vo.cores = processor.getLogicalProcessorCount() ;
+ vo.totalRate = totalCpu ;
+ vo.sysRate = cSys ;
+ vo.userRate = user ;
+ vo.waitRate = ioWait ;
+ vo.freeRate = idle ;
+ return vo ;
+ }
+
+ @Data
+ public static class CpuInfoVo{
+ /**
+ * 鏍稿績鏁�
+ */
+ public int cores;
+ /**
+ * CPU鎬荤殑浣跨敤鐜�
+ */
+ public double totalRate;
+ /**
+ * CPU绯荤粺浣跨敤鐜�
+ */
+ public double sysRate;
+ /**
+ * CPU鐢ㄦ埛浣跨敤鐜�
+ */
+ public double userRate;
+ /**
+ * CPU褰撳墠绛夊緟鐜�
+ */
+ public double waitRate;
+ /**
+ * CPU褰撳墠绌洪棽鐜�
+ */
+ public double freeRate;
+
+ public String toString(){
+ StringBuilder sb = new StringBuilder() ;
+ sb.append(" CPU淇℃伅锛歕n");
+ sb.append(" 鏍稿績鏁帮細" + cores + "\n");
+ sb.append(" CPU鎬荤殑浣跨敤鐜囷細" + totalRate + "\n");
+ sb.append(" CPU绯荤粺浣跨敤鐜囷細" + sysRate + "\n");
+ sb.append(" CPU鐢ㄦ埛浣跨敤鐜囷細" + userRate + "\n");
+ sb.append(" CPU褰撳墠绛夊緟鐜囷細" + waitRate + "\n");
+ sb.append(" CPU褰撳墠绌洪棽鐜囷細" + freeRate + "\n");
+
+ return sb.toString() ;
+ }
+
+ }
+}
--
Gitblit v1.8.0