用java写一个监控linux服务监视linux内存和磁盘,如果内存不够用磁盘不够用报警并清理磁盘空间,清理内存,每天自动监控用中文表达

下面是一个用 Java 编写的简单的监控 Linux 服务器内存和磁盘的程序。这个程序会检查内存和磁盘的使用情况,如果发现内存或磁盘不足,就会触发报警,并尝试清理一些空间。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;

public class LinuxMonitor {

    public static void main(String[] args) {
        monitorSystemResources();
    }

    private static void monitorSystemResources() {
        try {
            // 获取当前时间
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String currentTime = dateFormat.format(new Date());

            // 获取系统内存使用情况
            double freeMemory = getFreeMemory();
            double totalMemory = getTotalMemory();
            double memoryUsage = (totalMemory - freeMemory) / totalMemory * 100;

            System.out.println(currentTime + " - 内存使用情况: " + memoryUsage + "%");

            // 获取磁盘使用情况
            double freeDiskSpace = getFreeDiskSpace();
            double totalDiskSpace = getTotalDiskSpace();
            double diskUsage = (totalDiskSpace - freeDiskSpace) / totalDiskSpace * 100;

            System.out.println(currentTime + " - 磁盘使用情况: " + diskUsage + "%");

            // 如果内存或磁盘不足,触发报警并尝试清理空间
            if (memoryUsage > 90) {
                triggerAlarm("内存不足");
                cleanupMemory();
            }

            if (diskUsage > 90) {
                triggerAlarm("磁盘空间不足");
                cleanupDiskSpace();
            }

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

    private static double getFreeMemory() throws IOException {
        Process process = Runtime.getRuntime().exec("free -m");
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        reader.readLine(); // skip the header
        String[] memoryInfo = reader.readLine().split("\\s+");
        return Double.parseDouble(memoryInfo[3]); // free memory in MB
    }

    private static double getTotalMemory() throws IOException {
        Process process = Runtime.getRuntime().exec("free -m");
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        reader.readLine(); // skip the header
        String[] memoryInfo = reader.readLine().split("\\s+");
        return Double.parseDouble(memoryInfo[1]); // total memory in MB
    }

    private static double getFreeDiskSpace() throws IOException {
        Process process = Runtime.getRuntime().exec("df -h /");
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        reader.readLine(); // skip the header
        String[] diskInfo = reader.readLine().split("\\s+");
        return Double.parseDouble(diskInfo[3].replace("%", "")); // free disk space percentage
    }

    private static double getTotalDiskSpace() throws IOException {
        Process process = Runtime.getRuntime().exec("df -h /");
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        reader.readLine(); // skip the header
        String[] diskInfo = reader.readLine().split("\\s+");
        return Double.parseDouble(diskInfo[1].replace("%", "")); // total disk space percentage
    }

    private static void triggerAlarm(String message) {
        System.out.println("触发报警: " + message);
        // 在这里可以添加发送报警邮件或其他通知的逻辑
    }

    private static void cleanupMemory() throws IOException, InterruptedException {
        System.out.println("尝试清理内存...");
        // 在这里可以添加清理内存的逻辑
        // 例如: System.gc();
    }

    private static void cleanupDiskSpace() throws IOException, InterruptedException {
        System.out.println("尝试清理磁盘空间...");
        // 在这里可以添加清理磁盘空间的逻辑
        // 例如: 删除一些不必要的文件
    }
}

这个程序使用 free 命令获取内存信息,使用 df 命令获取磁盘信息。如果内存或磁盘使用率超过 90%,就会触发报警并尝试清理一些资源。请注意,清理内存和磁盘空间的方式可以根据实际情况进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值