diff --git "a/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241/sql/mysql/phoenix.sql" "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241/sql/mysql/phoenix.sql" index 5b521ef25a6890e7ae3288986cbcda2db3b6f914..224e7b0b7adb9c76af9a4d4bb3e80a5b0679b73c 100644 --- "a/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241/sql/mysql/phoenix.sql" +++ "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241/sql/mysql/phoenix.sql" @@ -1028,6 +1028,7 @@ CREATE TABLE `MONITOR_SERVER_PROCESS` `CPU_LOAD_CUMULATIVE` double(16, 4) NULL DEFAULT NULL COMMENT '进程的累积CPU使用率', `BITNESS` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '进程的位数', `MEMORY_SIZE` bigint(20) NULL DEFAULT NULL COMMENT '占用内存大小(单位:byte)', + `PORT` varchar(1024) DEFAULT NULL COMMENT '端口列表(逗号分割)', `INSERT_TIME` datetime NOT NULL COMMENT '新增时间', `UPDATE_TIME` datetime NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`ID`) USING BTREE, diff --git a/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/domain/server/ProcessDomain.java b/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/domain/server/ProcessDomain.java index dac70d0b374ad90f4ca6ab75d1ce960edf64f0f9..e9bce84aa2637ea20b65c4549e4ed14a926fc411 100644 --- a/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/domain/server/ProcessDomain.java +++ b/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/domain/server/ProcessDomain.java @@ -89,5 +89,9 @@ public class ProcessDomain extends AbstractSuperBean { * 占用内存大小(单位:byte) */ private long memorySize; + /** + * 进程占用的端口列表 + */ + private String port; } } diff --git a/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/util/server/oshi/ProcessUtils.java b/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/util/server/oshi/ProcessUtils.java index c091a702ddde8ce1f313dea97f091010afdf9218..7d6543e4d3ce51fd00e415da95c905fb913bdb94 100644 --- a/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/util/server/oshi/ProcessUtils.java +++ b/phoenix-common/phoenix-common-core/src/main/java/com/gitee/pifeng/monitoring/common/util/server/oshi/ProcessUtils.java @@ -3,19 +3,19 @@ package com.gitee.pifeng.monitoring.common.util.server.oshi; import cn.hutool.core.date.BetweenFormatter; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import com.gitee.pifeng.monitoring.common.domain.server.ProcessDomain; import com.gitee.pifeng.monitoring.common.init.InitOshi; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import oshi.software.os.InternetProtocolStats; import oshi.software.os.OSProcess; import oshi.software.os.OperatingSystem; import oshi.software.os.OperatingSystem.ProcessFiltering; import oshi.software.os.OperatingSystem.ProcessSorting; -import java.util.Comparator; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import static com.gitee.pifeng.monitoring.common.util.CollectionUtils.distinctByKey; @@ -128,6 +128,8 @@ public class ProcessUtils extends InitOshi { */ private static List wrapProcessInfoDomainList(List processes) { List processInfoList = Lists.newArrayList(); + // 获取进程与端口的映射关系 + Map> processPortsMap = getProcessPortsMapping(); for (OSProcess process : processes) { // 进程ID int processId = process.getProcessID(); @@ -167,11 +169,58 @@ public class ProcessUtils extends InitOshi { processInfoDomain.setCpuLoadCumulative(cpuLoadCumulative); processInfoDomain.setBitness(bitness); processInfoDomain.setMemorySize(memorySize); + // 设置进程占用的端口 + if (processPortsMap.containsKey(processId)) { + processInfoDomain.setPort(StrUtil.join(",", processPortsMap.get(processId))); + } processInfoList.add(processInfoDomain); } return processInfoList; } + + /** + *

+ * 获取进程与对应端口的映射关系 + *

+ * + * @return 进程ID与端口列表的映射 + * @author weixu38 + * @custom.date 2025/4/15 16:48 + */ + public static Map> getProcessPortsMapping() { + try { + Map> processPortsMap = new HashMap<>(); + + OperatingSystem os = SYSTEM_INFO.getOperatingSystem(); + InternetProtocolStats ipStats = os.getInternetProtocolStats(); + + List connections = ipStats.getConnections(); + + if (connections != null) { + for (InternetProtocolStats.IPConnection conn : connections) { + int localPort = conn.getLocalPort(); + int pid = conn.getowningProcessId(); + // 过滤无效数据 + if (pid <= 0 || localPort <= 0) { + continue; + } + // 可选:只保留监听中的连接 + if (conn.getState() != InternetProtocolStats.TcpState.LISTEN) { + continue; + } + processPortsMap.computeIfAbsent(pid, k -> new ArrayList<>()).add(localPort); + } + } + + return processPortsMap; + } catch (Throwable e) { + log.error("获取进程端口映射关系异常:{}", e.getMessage(), e); + return Collections.emptyMap(); + } + } + + /** *

* 获取正在运行的进程数 diff --git a/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/entity/MonitorServerProcess.java b/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/entity/MonitorServerProcess.java index 14b73c9d8bc31c5d9efd15f4e4bc15661afda62c..472b3841be4ad8ddaae2c13223f9fb85a995c7f5 100644 --- a/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/entity/MonitorServerProcess.java +++ b/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/entity/MonitorServerProcess.java @@ -110,6 +110,12 @@ public class MonitorServerProcess { @TableField("MEMORY_SIZE") private Long memorySize; + /** + * 端口号列表(逗号分隔) + */ + @TableField("PORT") + private String port; + /** * 新增时间 */ diff --git a/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/service/impl/ServerProcessServiceImpl.java b/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/service/impl/ServerProcessServiceImpl.java index f1644262aa482baf074c99b5c4f80ef1a919b905..78e3134881c920db32c09805a26c3360b8a65c03 100644 --- a/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/service/impl/ServerProcessServiceImpl.java +++ b/phoenix-server/src/main/java/com/gitee/pifeng/monitoring/server/business/server/service/impl/ServerProcessServiceImpl.java @@ -67,6 +67,7 @@ public class ServerProcessServiceImpl extends ServiceImpl进程ID:' + processId + ' ' + @@ -718,6 +720,11 @@ '

' + ' ' + user + '
'; + if (!isEmpty(port)) { + html += '
' + + ' ' + port + + '
'; + } if (!isEmpty(commandLine)) { html += '
' + ' ' + commandLine +