原文链接: https://blog.csdn.net/u014740338/article/details/66975550

问题描述

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

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

执行完这三条指令后通过free -m命令查看,free可用内存马上增多,buff/cache列值变小,说明内存被释放了,但是不能总是手动的执行这三条指令,所以最后写了一个shell脚本,开启Linux定时任务crond,每天早上检查一次free内存,当小于4G时执行这三条命令(注:系统内容20G)。

注意:在执行这三条命令之前一定要先执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件)

解决方案(手动)

1. 修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档):

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

To free pagecache:

* echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

* echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

* echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.

This tunable was added in 2.6.16.

注意:在执行这三条命令前先执行sync命令

解决方案(自动)

1、编写shell定时任务脚本freemem.sh

#! /bin/sh

used=`free -m | awk 'NR==2' | awk '{print $3}'`

free=`free -m | awk 'NR==2' | awk '{print $4}'`

echo "===========================" >> /app/memory/logs/mem.log

date >> /app/memory/logs/mem.log

echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> /app/memory/logs/mem.log

if [ $free -le 4000 ] ; then

sync && echo 1 > /proc/sys/vm/drop_caches

sync && echo 2 > /proc/sys/vm/drop_caches

sync && echo 3 > /proc/sys/vm/drop_caches

used_ok=`free -m | awk 'NR==2' | awk '{print $3}'`

free_ok=`free -m | awk 'NR==2' | awk '{print $4}'`

echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> /app/memory/logs/mem.log

echo "OK" >> /app/memory/logs/mem.log

else

echo "Not required" >> /app/memory/logs/mem.log

fi

exit 1

2、使用crontab -e命令编辑当前用户的crontab

0 6 * * * /usr/local/tomcat/sztFileFront/bin/freemem.sh

3、重启crond服务

/sbin/service crond restart

备注:使用的suse系统,上述命令执行不成功,使用下面的命令即可

/sbin/service cron start        启动crontab

/sbin/service cron stop        停止crontab

/sbin/service cron restart     重新启动crontab

/sbin/service cron reload     重新载入crontab

4、查看crond服务是否重启成功

sbin/service crond status

Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)

作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/12/17/dro ...

Cache占用过多内存导致Linux系统内存不足问题排查

问题描述 Linux服务器内存使用量超过阈值,触发报警. 问题排查 首先,通过free命令观察系统的内存使用情况,显示如下: total used free shared buffers cached ...

[转载]Linux服务器性能评估与优化

转载自:Linux服务器性能评估与优化 一.影响Linux服务器性能的因素 1. 操作系统级 CPU 内存 磁盘I/O带宽 网络I/O带宽 2.        程序应用级 二.系统性能评估标准 影响性 ...

[转载]Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 转载至:https://www.sdnlab.com/17530.html 我们使用Linux作为服务器操作系统时,为了达到高并发处理 ...

Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

pom.xml jar 包支持 com.jcraftjsch& ...

Linux命令(二十) 显示系统内存状态 free

一.命令简介 free 命令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存.共享内存区段,以及系统核心使用的缓冲区等. 二.参数说明 -b 以Byte为单位显示内存使用情况 -K 以KB为单位 ...

找出linux服务器IO占用高的程序

一台服务器比较性能无外乎内存.cpu使用率.IO使用率,把这3样优化好了,你服务器的负载就要小很多,当然网络情况不在我的考虑范围,毕竟网络这个情况是很不稳定,就算你服务器上把网络优化得再好,idc不 ...

Golang检测Linux服务器端口占用

代码实现 func CheckPort(port int) error { checkStatement := fmt.Sprintf(`netstat -anp | grep -q %d ; ech ...

linux服务器宕机分析/性能瓶颈分析

linux服务器宕机分析/性能瓶颈分析   服务器宕机原因很多,资源不足.应用.硬件.系统内核bug等,以下一个小例子 服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因 1.last ...

随机推荐

CentOS 7 虚拟机无法开机问题

若虚拟机在不正常关机的时候会遇到如下图所示的问题:先点击"取消"按钮

myeclipse maven pom.xml 配置错误

http://www.oschina.net/question/2265006_219341#tags_nav maven pom.xml 配置文件错误       腾讯云消息队列CMQ架构解析&gt ...

CodeForces 135 B. Rectangle and Square(判断正方形和 矩形)

题目:http://codeforces.com/problemset/problem/135/B 题意:给8个点 判断能否用 4个点构成正方形,另外4个点构成 矩形. 输出 第一行是正方形 ,第二行 ...

javascript进击(五)JS对象

JavaScript中是所有事物都是对象.JavaScript允许自定义对象. 对象是带有属性和方法的特殊数据类型. 访问对象的属性: 常见属性 访问对象的方法: 常用方法 (创建JavaScript ...

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一 ...

MySqlClient访问tinyint字段返回布尔值

原文 MySqlClient访问tinyint字段返回布尔值 症状: 使用MySqlClient访问tinyint       unsign 字段返回布尔值 true 和        false,但 ...

cocos2d-js 帧序列动画

1.resource.js var res = { playerWalk_plist:"res/playerWalk.plist", playerWalk_png:"re ...

洛谷P1516 青蛙的约会(扩展欧几里德)

洛谷题目传送门 很容易想到,如果他们相遇,他们初始的位置坐标之差\(x-y\)和跳的距离\((n-m)t\)(设\(t\)为跳的次数)之差应该是模纬线长\(l\)同余的,即\((n-m)t\equiv ...

7.11登入表单html

...

25个Linux相关的网站

下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件,新闻,以及其它所有的关于Linux的东西.关于Linux的分发包历史,可以看看本站的这篇文章< ...

Linux内存耗尽宕机6,转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案...相关推荐

  1. linux java缓存失效_转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案...

    原文链接: https://blog.csdn.net/u014740338/article/details/66975550 问题描述 Linux内存使用量超过阈值,使得Java应用程序无可用内存, ...

  2. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决

    Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决 参考文章: (1)Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决 (2)https://www.cnblog ...

  3. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)

    Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续) 参考文章: (1)Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续) (2)https://www. ...

  4. linux内存不足宕机,记一次linux机器内存占用太多导致的服务宕机

    背景 最近我们测试环境部署的一个项目总是不停的宕机,之前也有过,但是最近特别频繁 猜测 可能是因为cup或者内存占用太大导致的服务宕机 执行 1.登录linux服务器 2.top命令 下面是对每一行信 ...

  5. linux 改路由表 宕机,网管宕机,服务停止?别担心,解决方案来了

    本文以LVS + keepalived 实现基于keepalived的LVS的高可用 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项 ...

  6. Linux 业务突然宕机、系统卡死、磁盘空间爆满,该怎么查?

    场景 在服务器运维过程中,我们偶尔会发现业务突然宕机,进去服务器发现异常卡顿查看服务器磁盘空间发现磁盘满载. 如何找到占用空间大的目录或文件? 1.比较笨的方法: 在根目录下,du -hs命令,列出各 ...

  7. linux服务器宕机原因排查,Linux服务器中网站数据库宕机的自动检测及重启脚本...

    最近一段时间,Linux服务器中的一个重要网站的数据库总是奔溃,导致网站无法正常访问(显示为网站正在维护中),于是就决定写个脚本来自动监控这个网站是否正常,如果发现网站宕机,则自动重启数据库和网站. ...

  8. linux模拟主机宕机,AIX HA模拟宕机--维护磁带机

    AIX HA模拟宕机--维护磁带机 一.概述: 2013年11月15日要对辽宁红沿河核电站两台小机进行小机的磁带机维护操作,需要停机维护,下面是对小机和数据库的操作步骤: 二.操作步骤: 1.备份cl ...

  9. linux怎么和宿主机同步时间,Linux 中设置和同步时间

    准确的系统时间是稳定服务的基础,本文介绍与时间相关的Linux命令,以及如何为自己的Linux服务器维护准确的时间. 时间 一台Linux服务器有两个时间源,一个是硬件时间,即服务器硬件CMOS维护的 ...

最新文章

  1. Binary Differences
  2. 机器学习_生成式模型与判别式模型
  3. log4j 日志限制大小 拆分成30个 不按日期分日志 按大小拆分 按日期产生...
  4. input 事件_14. 教你零基础搭建小程序:小程序事件绑定(1)
  5. 基于 Storyboard 多种方式的页面跳转、参数传递
  6. crashdumpandroid_Android 中Crash时如何获取异常信息详解及实例
  7. [Freescale]E9学习笔记-LTIB总结
  8. 面试风云录(02) - 与顶级CTO交手的难忘经验...
  9. python字符串数组_python将字符串转换成数组的方法
  10. oracle12c备份和恢复,Oracle12c数据的逻辑备份与恢复
  11. csdn 不登录浏览全文 chrome 浏览器
  12. 六大场景下,模型分数如何应用?
  13. group by 分组函数 的用法
  14. hadoop编程-maven环境搭建
  15. 2016年APP推广应该怎么做?
  16. 微信指纹锁原理及安全性分析
  17. android 语音留言功能,不想接电话怎么办?中移动语音信箱Android版测评
  18. Magento创建主题
  19. 《Web安全之机器学习入门》笔记:第七章 7.5朴素贝叶斯检测WebShell(二)
  20. 邻居好说话:冒泡排序

热门文章

  1. c通讯录 :动态申请内存版本
  2. 蚂蚁金服面试相关流程及关注核心技术方向收集
  3. 不要想在任何事上都占上风
  4. DHCP 自动分配IP地址 ,IP隧道
  5. python写xml文件 数据量特别大_python处理xml大文件[xml.sax]
  6. clamav Java_ClamAV病毒查杀
  7. python 标签云_Python word_cloud 样例 标签云系列(三)
  8. 如何从零开始搭建服务器
  9. android textview 用html设置字体
  10. ae制作小球轨迹运动_别走,年轻人!这是AE粘性小球制作方法汇总!