[转帖]OutOfMemory自动重启程序

outofmemory,自动,重启,程序 · 浏览次数 : 0

小编点评

## Alternative Solutions to Handle OutOfMemoryError **1. Implement a Graceful Shutdown Mechanism:** - Modify the `start.sh` script to exit gracefully upon encountering an OutOfMemoryError. - Use `System.exit(0)` or `System.exit(1)` to signal success or failure. - Append an `at` command to the end of the `start.sh` script with a `sleep` of 10 seconds to allow the process to exit gracefully. **2. Configure Memory Monitoring and Restart:** - Use the `-XX:+HeapDumpOnOutOfMemoryError` flag with the `at` command. - Specify the path to the heap dump file as `/data/log/appOutOfMemory.hprof`. - Restart the service immediately upon reaching the OutOfMemoryError. **3. Use a Monitoring and Restart Tool:** - Install tools like `atop` or `vmstat` to monitor memory usage and process creation/termination. - Configure the service to restart automatically when memory usage reaches a set threshold. **4. Implement a Dedicated Monitoring Service:** - Create a separate service that continuously monitors memory usage and service health. - Send alerts or notifications when memory limits are reached. - Restart the service automatically upon reaching the memory limit. **5. Increase Memory Limit:** - If possible, increase the allocated memory for the service to accommodate larger memory requirements. - Remember that this option can have performance implications.

正文

OutOfMemory以后程序已经假死,无法再提供服务,最好的做法是dump内存,发送警告,然后重启服务

我的方案:利用at命令延迟启动

但有一个问题,at最多支持分钟操作,也就是说要1分钟以后才能启动,我的业务允许接受1分钟的延迟,总比收到警告然后等到人工去启动要好一点。

 -XX:OnOutOfMemoryError="at -f /data/deploy/start.sh now +1 minutes;kill -9 %p;"

    at命令的安装和启动

    yum -y install at
    systemctl restart atd
    

      知识点
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath=/data/log/appOutOfMemory.hprof
      OnOutOfMemoryError命令要等到dump文件appOutOfMemory.hprof生成完成以后才会执行
      注意直接执行restart.sh是行不通的,因为新启动的进程直接保留了原进程的端口引用,并且这个端口引用无法被kill,Spring boot在初始化完成以后就会发现端口已经被占用了就会停掉,如果使用随机端口的话则可以忽略这个问题。
      下面的方案行不通

       -XX:OnOutOfMemoryError="at -f /data/deploy/restart.sh"
      

        改进思路

        停止进程可以用自带的参数: -XX:+ExitOnOutOfMemoryError -XX:+CrashOnOutOfMemoryError
        思路一: 可以用监控脚本定时每隔10秒监控进程是否存在,如果不存在则启动程序
        思路二: 写一个专门启动服务的程序,XX:OnOutOfMemoryError发一条请求任务到这个启动服务的程序
        上面的改进思路是有追求的运维干的事情,我不是

        与[转帖]OutOfMemory自动重启程序相似的内容:

        [转帖]OutOfMemory自动重启程序

        OutOfMemory以后程序已经假死,无法再提供服务,最好的做法是dump内存,发送警告,然后重启服务 我的方案:利用at命令延迟启动 但有一个问题,at最多支持分钟操作,也就是说要1分钟以后才能启动,我的业务允许接受1分钟的延迟,总比收到警告然后等到人工去启动要好一点。 -XX:OnOutOfM

        [转帖]JVM metaspace outofmemory

        https://www.jianshu.com/p/1ca44f94e42f 解决服务器进程退出问题(metaspace溢出) 现象 策划反应服务器进不去,远程看了一下进程消失了(crash) 有时候也会出现能登录,但是无法执行操作(进程还在),无法被正常shutdown 进程根目录下出现了java

        [转帖]一次操作系统报错OutOfMemory Error的处理记录

        在启动公司内嵌的tomcat容器时出现报错, 如下: # There is insufficient memory for the Java Runtime Environment to continue.# Native memory allocation (malloc) failed to a

        [转帖]

        Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

        [转帖]

        https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

        [转帖]ISV 、OSV、 SIG 概念

        ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

        [转帖]Redis 7 参数 修改 说明

        2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

        [转帖]HTTPS中间人攻击原理

        https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

        [转帖]关于字节序(大小端)的一点想法

        https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

        [转帖]awk提取某一行某一列的数据

        https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打