首页 > 系统相关 >编写java程序,自动监控程度,dump内存文件

编写java程序,自动监控程度,dump内存文件

时间:2024-07-29 21:57:02浏览次数:19  
标签:Java dump import static 内存 memory java MemoryMonitor

步骤 1:编写 Java 程序

首先,编写一个 Java 程序,当内存使用达到 11GB 时生成 heap dump 文件,并以日期命名。将以下代码保存为 MemoryMonitor.java 文件:

import com.sun.management.HotSpotDiagnosticMXBean;
import javax.management.MBeanServer;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MemoryMonitor {
    private static final long HEAP_DUMP_THRESHOLD = 11L * 1024L * 1024L * 1024L; // 11 GB
    private static final String DUMP_FILE_PATH = "/home/dumpfile/";
    private static final MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
    private static final HotSpotDiagnosticMXBean hotSpotDiagnosticMXBean;

    static {
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        try {
            hotSpotDiagnosticMXBean = ManagementFactory.newPlatformMXBeanProxy(
                    server,
                    "com.sun.management:type=HotSpotDiagnostic",
                    HotSpotDiagnosticMXBean.class);
        } catch (Exception e) {
            throw new RuntimeException("Failed to initialize HotSpotDiagnosticMXBean", e);
        }
    }

    public static void main(String[] args) {
        new Thread(MemoryMonitor::monitorMemory).start();
    }

    private static void monitorMemory() {
        while (true) {
            MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
            long usedMemory = heapMemoryUsage.getUsed();
            System.out.println("Used memory: " + usedMemory);
            if (usedMemory >= HEAP_DUMP_THRESHOLD) {
                try {
                    String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                    String dumpFilePath = DUMP_FILE_PATH + "heapdump_" + timestamp + ".hprof";
                    hotSpotDiagnosticMXBean.dumpHeap(dumpFilePath, true);
                    System.out.println("Heap dump generated at " + dumpFilePath);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            }
            try {
                Thread.sleep(10000); // Check every 10 seconds
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
    }
}

步骤 2:编译 Java 程序

打开终端并运行以下命令来编译 Java 程序:

javac MemoryMonitor.java

步骤 3:创建启动脚本

创建一个启动脚本,以便在后台运行该程序并配置 JVM 参数。将以下内容保存为 start_memory_monitor.sh 文件:

#!/bin/bash

JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/dumpfile -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/dumpfile/gc.log -XX:OnOutOfMemoryError='kill -3 %p'"

nohup java $JAVA_OPTS -cp . MemoryMonitor > /home/dumpfile/memory_monitor.log 2>&1 &
echo "MemoryMonitor started in background."

步骤 4:赋予脚本执行权限

运行以下命令,赋予脚本执行权限:

chmod +x start_memory_monitor.sh

步骤 5:运行脚本

运行启动脚本,使 Java 程序在后台运行:

./start_memory_monitor.sh

总结

  1. 编写并保存 MemoryMonitor.java 文件。
  2. 在终端中运行 javac MemoryMonitor.java 编译 Java 程序。
  3. 创建并保存 start_memory_monitor.sh 启动脚本。
  4. 运行 chmod +x start_memory_monitor.sh 赋予启动脚本执行权限。
  5. 运行 ./start_memory_monitor.sh 启动 Java 程序并使其在后台运行。

标签:Java,dump,import,static,内存,memory,java,MemoryMonitor
From: https://blog.csdn.net/sunyuhua_keyboard/article/details/140782263

相关文章

  • 2024年华为OD机试真题-找出作弊的人-(C++/Java/python)-OD统一考试(C卷D卷)
    2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】  题目描述公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,......
  • 【Java】韩顺平Java学习笔记 第19章 IO流
    文章目录文件概述常用的文件操作创建文件获取文件信息目录的操作和文件删除流的分类各抽象类常用子类对象FileInputStreamFileOutputStreamFileReaderFileWriter节点流和处理流概念BufferedReaderBufferedWriterBufferedInputStream&BufferedOutputStream对象流:Obje......
  • html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化
    html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化。原来的代码如下:<divclass="cardcardcol-sm-6col-md-4col-xl-2col-lg-2justify-content-centerbg-secondary-subtle"id="tools-trigger"><ahref="javascript:vo......
  • java基础知识汇总(一)
    PART1:Java基础知识概述与Java的下载安装1)Java语言概述:①Java的发展史:詹姆斯·高斯林(JamesGosling)1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第一代工作站NeWS系统,但不受重视。后来转至S......
  • Java 关键字、标识符、注释、常量
    关键字:被Java语言赋予特殊含义的单词,一般是使用小写字母构成。如何区分关键字?idea对关键字具有高亮的效果。但goto和const作为保留字存在。标识符:给类、接口、方法、变量等起名字时使用的字符序列起名字时的规则:1、英文大小写字母2、数字字符3、$和_起名字时的规范:1......
  • JAVA毕业设计|springboot房屋租赁系统包含文档代码讲解
     收藏点赞不迷路 关注作者有好处文末获取源码一、系统展示二、万字文档展示开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven 编号:springboot008一、系统展示二、万字文档展示第5章系统详细设计5.1管理员功能模......
  • JAVA毕业设计|springboot在线宠物用品交易网站的设计与实现包含文档代码讲解
    收藏点赞不迷路 关注作者有好处文末获取源码一、系统展示二、万字文档展示开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven 编号:springboot082一、系统展示二、万字文档展示第5章系统详细设计5.1管理员模块的......
  • Javaweb项目|停车场微信小程序的设计与实现+ssm【源码+论文+PPT+部署视频】
    我们提供多元化的技术项目服务,涵盖Java、PHP、Python等编程语言,以及前端开发、人工智能、大数据、单片机开发、ASP.NET、物联网等领域。我们还提供简历模板、面试题库和学习资料,帮助用户提升技术能力和就业竞争力。我们的服务内容包括:免费功能设计、任务书和开题报告撰写、......
  • Javaweb项目|springboot大学生就业招聘系统的设计与实现
    收藏点赞不迷路 关注作者有好处文末获取源码一、系统展示二、万字文档展示 基于springboot大学生就业招聘系统的设计与实现开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven 编号:springboot047一、系统展示二、万......
  • 小白快速了解的Java知识!
    Java初学习1.Java的诞生与崛起1972年,c语言诞生,其高效率,运行速度快让大批程序员为之倾倒,但是c语言的指针及其内存管理需要程序员自行操作,浪费了大量的时间以及精力,再加上c语言需要尽可能的使用c函数库,并没有像宣传的那样可以轻松的跨平台,导致部分程序员对于其暴政感到不满。1982......