java swap空间_故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题...

2023-05-16

背景起因:

记起以前的另一次也是关于内存的调优分享下

有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡。

我按经验开始调优,在每个关键步骤的加入如下代码耗时统计进行压测:

long startTime = System.currentTimeMillis();

callRpc();   //这里比如调用RPC伪代码,当然还在插入数据库,中间件地方都加入统计

long costTime = (System.currentTimeMillis() - startTime);

//统计600毫秒以上耗时

if (costTime > 600) {

logger.warning("callRpc cost time:" + costTime);

}

然后去grep日志, 最后神奇的发现各个地方都有超过600毫秒的地方...

然后各种定位的误导...

当然最终是解决了,原因是由于程序里使用了大对象导致

细分析,即使这种情况深研究也是分很多情况的

问题重现:

原因分析:

由于系统中使用了大对象,当并发来临,内存讲被吃紧,将有可能引起如下三种情况

第一种情况, 系统内存够用(JVM内存未使用到SWAP内存),但JVM内存不够,最终导致JVM的频繁垃圾回收(FGC),严重影响性能 (stop the word)

第二种情况,系统内存不够,把JVM堆部分用到了SWAP,那么此时的垃圾回收需要把SWAP的内存换回到系统物理内存再进行JVM的垃圾回收。最大影响,导致每次GC的时间变得很久

第三种情况,  物理内存不够用, 大量JVM的堆内存被交换到SWAP后,垃圾回收时,把SWAP内存换回物理内存,但SWAP的内存又不会立即回, 此时可以观察到垃圾回收同时swap使用的内存会变大(其它部分内存要交换到SWAP里)

准备:

ubuntu 1G  4核

先关闭SWAP虚拟空间 sudo swapoff -a

java version "1.7.0_101"

apache-tomcat-8.5.9

设置好Tomcat的JVM内存:

JAVA_OPTS="-Xmx500m -Xms500m -Xmn200m -Xss228k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC"

apache-jmeter-2.13 用于模拟HTTP请求压测,都是100条线程并发进行压测

模拟代码如下

/**

* 模拟当系统中使用大对象时,对JVM造成的影响

*

* @author 包子(何锦彬). 2017.01.07

* @QQ 277803242

*/

@WebServlet("/Test")

public class Test extends HttpServlet {

private static final long serialVersionUID = 1L;

private Logger logger = Logger.getLogger(Test.class.getName());

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// use java heap 10m

byte[] bts = new byte[1024 * 1024 * 10];// 代码段1

long startTime = System.currentTimeMillis();

// deal

try {

// 模拟业务花费时间

Thread.sleep(500);

} catch (InterruptedException e) {

}

// 理论上这里输出500附近

long costTime = (System.currentTimeMillis() - startTime);

if (costTime > 600) {

logger.warning("cost time:" + costTime);

}

Writer out = response.getWriter();

out.append("ok");

}

先模拟正常的情况:

先注释掉"代码段1", 1W个请求下来,基本耗时都在500,一切正常,返回都是在500毫秒附近

05eebde4d3f1fd2b04eb972809a7bae0.png

垃圾回收情况,只发生了1次YGC,所以系统正常稳定...

8a5daf2f981ab5d2cafeefb6f5321576.png

模拟第一种情况:

放开“代码段1”,让每次请求都去堆内存申请10m的堆空间,同样是1W个请求,返回的平均值已经接近了2S

d8392e05aad90e8f171bcf68e6ad01e8.png

垃圾回收情况来看, 已经发生了1966次的FGC了, 在上面耗时158秒

f0bb921983beda3bb037939823ead2f1.png

模拟第二种情况:

把系统的SWAP打开,打开2G的SWAP,swapon -a

e549f16decc5d1b8c4e84f3ff31b37bf.png

调大JVM参数,到1G,让JVM用到部分SWAP的空间

此时再让每次请求都去堆内存申请10m的堆空间,同样是1W个请求,性能已经低于第二种情况

3c5744789001088b5c113350364dfec6.png

垃圾回收来看,回收次数是1766次,比第二种情况发生的次数还要少,但FGC耗费的时间已经是212秒,

(虽然多了200m内存也没差距这么大,更精确看年轻代一样的内存,耗时也远超过)远超过第二种情况了

此时垃圾回收详情:

97f1d64861a4b91560cebeac6af41993.png

模拟第三种情况:

这种情况和我上一篇提到的类似,如果系统内存不够用时,系统将KIIL掉内存

总结:

频繁垃圾回收(FGC),会严重影响性能。如果此时用耗时统计去寻找瓶颈,会出现失误;

如JVM堆用到了SWAP分区,当发生GC:

1,会导致大量SWAP被使用,2,导致每次GC的时间变得很久;

SWAP分区开启可以有效防止进程因为内存问题而被系统杀掉;

持续更新留言问题,解答疑问

欢迎关注我的公众号,专注重现各种线上的BUG

或搜 “包子的实验室”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java swap空间_故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题... 的相关文章

  • 在ubuntu系统中删除软件的三种最佳方法

    三种方法分别是 xff1a 1 通过软件中心删除 2 通过Synaptic Package Manager删除 3 通过命令行删除 三种方法的详细介绍 一 ubuntu software 1 点击左侧菜单栏上的 ubuntu softwar
  • 服务器上出现1069错误(由于登录失败而无法启动服务)解决方法

    服务器上出现 1069错误 xff08 由于登录失败而无法启动服务 xff09 解决方法 在本版面出现这个问题的频率也算是很高的了 xff0c 新手通常会比较多遇到这个问题 原因很简单 xff0c 安装 MY SQL 时是使用默认登录用户来
  • windows常见问题汇集

    禁止修改IP地址 Regsvr32 u Netcfgx dll Regsvr32 u Netshell dll Regsvr32 u Netman dll 允许修改IP地址 Regsvr32 Netcfgx dll Regsvr32 Net
  • Matlab 用fread、fwrite实现大文件读写

    最近在分析一个35G的大数据文件 xff0c 猛一看 xff0c 是不是很吓人啊 xff0c 不过还好 xff0c 师兄写文件的格式非常规范 xff0c 读取数据来也就很方便了 xff0c 主要是使用了读写文件的两个函数fread和fwri
  • 懒人笔记-memcache配置(php)

    1 下载memcache的windows稳定版 xff0c 解压放某个盘下面 xff0c 比如在c memcached 2 在终端 xff08 也即cmd命令界面 xff09 下输入 c memcached memcached exe d
  • Ping命令的作用和参数说明

    TTL是IP协议包中的一个值 xff0c 它告诉网络路由器包在网络中的时间是否太长而应被丢弃 有很多原因使包在一定时间内不能被传递到目的地 例如 xff0c 不正确的路由表可能导致包的无限循环 所以需要在包中设置这样一个值 xff0c 包在
  • VirtualBox4.1下为Debian6.0安装增强功能

    操作系统 xff1a WinXP SP3 虚拟机 xff1a VirtualBox 4 1 0 虚拟机系统 xff1a Debian 6 0 2 1 i386 在虚拟机中装完Debian6 0后 xff0c 桌面分辨率默认为800 600
  • Apache 目录索引样式 mod_autoindex

    apache 的目录索引样式用的mod autoindex模块 一般默认为开启状态 我们直接配置httpd conf文件 讲如下内容加到HTTD CONF Options Indexes FollowSymLinks IndexOption
  • 学生身高排序(结构体与集合)

    转载于 https www cnblogs com ziyandeyanhuo p 4834620 html
  • Amazon EC2 Ubuntu服务器安装图形化界面(Xfce)

    简介 Ubuntu Server是Ubuntu的不含GUI的发行版 xff0c 然而在GUI上可以获得一些工具更好的体验 本教程主要阐述如何在Amazon EC2的服务器上安装Ubuntu轻量化GUI Xfce xff0c 并通过Xrdp配
  • Linux 远程登录 | 菜鸟教程

    Linux 远程登录 Linux一般作为服务器使用 xff0c 而服务器一般放在机房 xff0c 你不可能在机房操作你的Linux服务器 这事我们就需要远程登录到Linux服务器来管理维护系统 Linux系统中是通过ssh服务实现的远程登录
  • 利用安卓手机的OTG共享有线网络

    利用安卓手机的OTG共享有线网络 安卓手机有些是支持OTG的 xff0c OTG的显著特点就是手机能给外部设备供电 xff0c 而且能交换数据 那么 xff0c 没有OTG功能的手机能不能给弄个OTG出来呢 xff1f 当然可以 xff0c
  • C 二维数组

    1 二维数组不部分初始化问题 char data 10 61 34 hello 34 34 world 34 二维数组初始化时 xff0c 列信息可以不给定 xff0c 行信息必须给定 列信息可以根据实际的字符串个数确定 xff0c 但是行
  • 推荐WPF的好书(图书)

    英文 xff1a xff11 Pro WPF in C 2008 Matthew MacDonald著 xff0c Apress出版 这本书 xff0c 英文版1072页 xff0c 在我看过的书中 xff0c 此书绝对是排第一的 xff0
  • 通过Enable-PSRemoting 开启Powershell远程管理失败的解决方法

    1 Powershell 远程管理是Windows一项很常用的管理方式 xff0c 但是我们在网上搜到的一些开启方法都是通过Enable PSRemoting xff0c 或者winrm quickconfig xff0c 但是有时候执行完
  • 获取root权限及破解原理分析

    2012 03 18 17 58 45 分类 xff1a android 字号 订阅 如今Android系统的root破解基本上成为大家的必备技能 xff01 网上也有非常多中一键破解的软件 xff0c 使root破解越来越easy 可是你
  • Windows Server 2012组策略更新功能

    大家都知道 xff0c 在我们下发组策略之后 xff0c 不管是计算机策略还是用户策略都有一个刷新的周期间隔 xff08 90分钟 43 30分钟的偏移量 xff09 xff0c 如果想让组策略马上生效 xff0c 可以去客户端gpupda
  • xmake新增对WDK驱动编译环境支持

    为什么80 的码农都做不了架构师 xff1f gt gt gt xmake v2 2 1新版本现已支持WDK驱动编译环境 xff0c 我们可以直接在系统原生cmd终端下 xff0c 执行xmake进行驱动编译 xff0c 甚至配合vscod
  • 共享的打印机不能打印,提示打印后台程序服务器没有运行

    1 在桌面选中 我的电脑 xff0c 鼠标右键选择 管理 xff1b 在 管理 窗口中 xff0c 选取 服务和应用程序 扩展项目下的 服务 选项 xff0c 在右侧出现系统服务列表中找到 Print Spooler 服务 xff0c 双击
  • OpenSUSE 11.1 任意用户读写NTFS分区的问题解决

    OpenSUSE 11 1 安装的时候可以选择是否自动挂载NTFS分区 xff0c 自动挂载的NTFS分区只有root用户才能写 xff0c 其它用户只能读 郁闷了好几天 xff0c 终于硬着头皮看了英文文档 xff0c 其实也很简单 xf

随机推荐

  • [luogu p1185] 绘制二叉树

    传送门 绘制二叉树 题目描述 二叉树是一种基本的数据结构 xff0c 它要么为空 xff0c 要么由根节点 xff0c 左子树和右子树组成 xff0c 同时左子树和右子树也分别是二叉树 当一颗二叉树高度为 m 1 时 xff0c 则共有 m
  • vscode cmake c++项目配置

    vscode 使用cmake配置c 43 43 c项目 下载插件c 43 43 cmake xff0c 多文件夹编译出一个可执行文件用到的命令 下载插件c 43 43 cmake xff0c 多文件夹编译出一个可执行文件 先看下主要的文件结
  • mtr使用教程

    使用mtr排查网络异常 mtr工具的主要作用是在于两点丢包时候的异常点排查及路径搜集 xff0c 是ping和tracert的结合 相比于ping它会有路由节点的展示 xff0c 而相对于tracert它会展示中间路由节点的丢包情况 xff
  • Hyper-V 2016 系列教程35 配置Windows Server 2016 ***服务器

    英文全称是 VirtualPrivate Network xff0c 也就是 虚拟专用网络 的使用在企业环境中较为常见 xff0c 属于远程访问中的一种常见技术 xff0c 用户可以通过互联网来访问企业局域网内部的资源 xff0c 就像在企
  • 修改debian系统默认语言

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 安装debian时选择了中文 xff0c 结果发现在shell中文还是乱码 xff0c 于是想把语言更改成英语 方法如下 xff1a vi etc default loca
  • iOS绘制线条的使用

    1 相关简介 1 1 iOS之UIBezierPath贝塞尔曲线属性简介 1 2 iOS之CAShapeLayer属性简介 2 绘制曲线 2 1 方法详解 void addQuadCurveToPoint CGPoint endPoint
  • 2.2Python数据处理篇之---math模块的数学函数

    目录 目录前言 xff08 一 xff09 一览表 1 基本函数2 对数函数3 三角函数4 角度的切换5 双曲函数6 math定义的常数 xff08 二 xff09 实例 目录 前言 math模块是基础的python数学函数模块 xff0c
  • vs 开发 qt 遇到 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”) 解决方案...

    参考链接 相关解决方案 转载于 https www cnblogs com eat too much p 10843399 html
  • 认识“JPG、TXT”格式的病毒

    前两天有突然个坏人从QQ上发来了个rar压缩文件 xff0c 当时我肯定这个是病毒 xff0c 但是在我解压后发现 xff0c 这个是一个asxarcs txt的文本文件 xff0c 随后我进入文件夹选项 xff0c 发现隐藏已知文件类型的
  • iOS、mac开源项目及库汇总

    2019独角兽企业重金招聘Python工程师标准 gt gt gt UI 下拉刷新 EGOTableViewPullRefresh 最早的下拉刷新控件 SVPullToRefresh 下拉刷新控件 MJRefresh 仅需一行代码就可以为U
  • jieba中文分词的.NET版本:jieba.NET

    简介 平时经常用Python写些小程序 在做文本分析相关的事情时免不了进行中文分词 xff0c 于是就遇到了用Python实现的结巴中文分词 jieba使用起来非常简单 xff0c 同时分词的结果也令人印象深刻 xff0c 有兴趣的可以到它
  • iptables 个人详解 从基础到精通

    iptables iptables xff1a 包过滤防火墙 firewall xff1a 防火墙 xff0c 隔离工具 xff1a 工作于主机或网络边缘 xff0c 对于进出本主机或网络的报文根据事先定义好的检查规则做匹配检测 xff0c
  • 系统学习iOS动画之七:其它类型的动画

    本文是我学习 iOS Animations by Tutorials 笔记中的一篇 文中详细代码都放在我的Github上 andyRon LearniOSAnimations 前面学习很多动画方面的知识 xff0c 但有两个更专业的主题不适
  • 打造FreeBSD中文桌面

    打造FreeBSD中文桌面 第一站 xff1a 装KDE 1 安装桌面肯定要先配置鼠标和显卡 xff0c 对BSD而言 xff0c 可以用自动检测 xff1a usr X11R6 bin X configue cp root xorg co
  • java 组合问题_java数组排列组合问题汇总

    面试或笔试中 xff0c 多次遇到以下4个关于排列组合的手撕算法 xff0c 这里做个笔记 xff0c 方法日后查阅 xff1a 1 无重复元素的数组 xff0c 求全排列 xff1b 2 有重复元素的数组 xff0c 求全排列 xff1b
  • Btrfs文件系统管理及应用

    btrfs xff08 通常念成 Butter FS xff09 xff0c 由 Oracle 于 2007 年开发的遵循 GPL 协定的开源文件系统 Btrfs 支持创建快照 snapshot 以及支持递归的快照 xff08 即支持快照的
  • ubuntu制作本地源

    背景 平时apt get install安装软件时 xff0c 下载的deb文件都会存放在 var cache apt archives 下 xff0c 为了今后重装或给别人用 xff0c 特别是没有网络时 xff0c 这些deb文件实际上
  • linux平台下远程桌面服务器的安装和设置

    系统 ubuntu 9 04 redhat centos 说明 xff1a 使用 xdm xff08 gdm kdm xff09 时 xff0c 使用的是UDP 177端口进行广播 xff0c 只适合布署在单一子网内 xff0c 如要在多个
  • Oracle的常见错误及解决办法

    ORA 12528 TNS listener all appropriate instances are blocking new connections ORA 12528问题是因为监听中的服务使用了动态服务 实例虽然启动 xff0c 但
  • java swap空间_故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题...

    背景起因 xff1a 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行 没经历过大并发考验 xff0c 然而在一次活动后 xff0c 人数并发一上来后 xff0c 系统开始卡 我按经验开始调优 xff0c 在每个关键步