博客
关于我
Linux内存耗尽宕机6,转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案...
阅读量:795 次
发布时间:2023-02-03

本文共 1326 字,大约阅读时间需要 4 分钟。

Linux内存使用量过高导致Java程序崩溃的解决方案

作为一名开发人员,我最近遇到了一个严重的技术问题:Linux系统内存使用量超标,导致Java应用程序无可用内存,最终导致程序崩溃。即使在程序没有挂掉时把程序停掉,系统内存也不会被释放。这个问题已经困扰了我好几个月,分析过好多次都没有找到原因,网上查了一下该问题其他人也都遇到过,不过并没有什么好的解决方案,因为项目一直没有上线,每次当内存不足时导致程序崩溃都是重启服务就好了,索性也就没花太多的时间来找问题。现在项目马上上线了,不能在出现程序崩溃的情况了,况且还是前置系统,更不能出现任何问题。

分析问题的过程

最开始一直认为是程序的原因导致内存泄漏,使用jdk自带的jmap -F -dump:live,format=b,file=/usr/local/sztFront/logs/heapdump.bin命令输出过几次dump文件,通过MemoryAnalyzer分析,应用程序没有耗内存过大的变量。后台猜测是否日志输出过多导致的,毕竟是前置系统,每天的报文量特别大,日志能到达5,6个G。所以把日志接收报文关了,日志大小马上降下来了,每天200M。程序挂掉的时间变长了,原来差不多一周就挂掉了,现在可以达到两周左右才挂掉,还是不行,没有冲根本上解决问题。

经过在网上搜索各种相关的问题,问题出现在Cached的值过大,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中,可以增加读写效率,该功能是Linux系统内核提供的,从2.6.16以后的核心版本才提供,也就是老版的操作系统,如红旗DC 5.0、RHEL 4.x之前的版本都没有。这就可以解释为什么我的项目总挂掉了,我的项目主要就是处理文件的,所以接收和下载的文件会被缓存起来,一直耗着内存不释放,即使把程序停掉也不会释放内存。

解决方法

经过反复思考和验证,找到了以下三种方法可以有效地清理Cached内存:

  • 执行sync命令

    sync命令用于将内核缓存内容刷出到磁盘,这样可以减少内核缓存中的内存占用。执行完sync命令后,可以通过free -m命令查看内存使用情况。

  • 清理Cached内存

    使用以下命令清理Cached内存:

    echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 3 > /proc/sys/vm/drop_caches

    每次执行这三条命令后,可以通过free -m命令查看内存可用量是否有所增加。

  • 优化文件缓存策略

    在系统配置文件中调整文件缓存策略,避免不必要的文件缓存。例如,在/etc/sysconfig/fsconf.py文件中设置如下内容:

    FS_CACHE_SIZE=800FS_CACHEEXP=30

    这样可以限制文件缓存的大小和缓存时间,防止文件缓存占用过多内存。

  • 总结

    通过上述方法,可以有效地清理系统内存中的Cached内存占用,解决内存不足导致的Java程序崩溃问题。建议在实际应用中结合使用这些方法,并监控系统内存和文件缓存状态,确保系统运行稳定。

    转载地址:http://atzfk.baihongyu.com/

    你可能感兴趣的文章
    Linux下查看文件夹及其文件大小
    查看>>
    Linux下查看用户列表
    查看>>
    linux下查询硬件的命令
    查看>>
    Linux下汇编语言学习笔记53 ---
    查看>>
    Linux下添加服务
    查看>>
    Linux下环境变量设置
    查看>>
    Linux下用mutt给QQ邮箱发匿名邮件
    查看>>
    Linux下用于查看系统当前登录用户信息 w命令
    查看>>
    Linux下用脚本命令打开文档、表格、PPT
    查看>>
    LINUX下登录脚本的执行顺序
    查看>>
    linux下的 lib文件的学习思考
    查看>>
    Linux下的64位数赋值要加入LL
    查看>>
    linux下的7种文件类型[ls -l]
    查看>>
    Linux下的PDF阅读器Foxit
    查看>>
    Linux下的Shell编程:基础、应用与最佳实践
    查看>>
    Linux下的串口系列---struct termios结构体
    查看>>
    Linux下的备份与恢复策略:全方位守护你的数据
    查看>>
    Linux下的多用户管理和认证:从入门到精通(附实例)
    查看>>
    Linux下的容器化技术:从入门到实践
    查看>>
    Linux下的文件权限与访问控制:守护你的数据宝藏
    查看>>