java 写一个程序监控某个进程的健康状态以及占用资源,并将信息存储到mysql
时间: 2024-02-05 14:12:49 浏览: 48
可以使用Java的ManagementFactory类来监控进程的健康状态和资源占用情况,同时使用JDBC连接MySQL数据库并将信息存储到MySQL中。
以下是一个简单的示例代码:
```java
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class ProcessMonitor {
public static void main(String[] args) {
String processName = "your_process_name";
String mysqlUrl = "jdbc:mysql://localhost:3306/your_database";
String mysqlUsername = "your_username";
String mysqlPassword = "your_password";
try {
// 获取进程ID和启动时间
RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
String jvmName = runtimeBean.getName();
long pid = Long.valueOf(jvmName.split("@")[0]);
long startTime = runtimeBean.getStartTime();
// 获取进程资源占用情况
Process process = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq " + processName + "\"");
java.util.Scanner scanner = new java.util.Scanner(process.getInputStream()).useDelimiter("\\A");
String taskListOutput = scanner.hasNext() ? scanner.next() : "";
String[] lines = taskListOutput.split("\\r?\\n");
String[] fields = lines[3].split("\\s+");
String memoryUsage = fields[4];
String cpuUsage = fields[6];
// 将信息存储到MySQL
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(mysqlUrl, mysqlUsername, mysqlPassword);
PreparedStatement statement = connection.prepareStatement(
"INSERT INTO process_monitor (process_name, pid, start_time, memory_usage, cpu_usage) VALUES (?, ?, ?, ?, ?)"
);
statement.setString(1, processName);
statement.setLong(2, pid);
statement.setLong(3, startTime);
statement.setString(4, memoryUsage);
statement.setString(5, cpuUsage);
statement.executeUpdate();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
注意替换代码中的`your_process_name`、`your_database`、`your_username`和`your_password`为实际的值。同时需要确保MySQL的JDBC驱动已经被引入项目中。