热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JIRA应用的内存参数设置不当+容器没有对资源进行限制导致服务挂掉的例子

背景:应用的部署结构是这样的:使用rancher管理的Docker集群,有三台物理主机,二十多个Docker容器,提供的功能是问题跟踪(JIRA),文档管理(Confluence),代码托管(sv

背景:
应用的部署结构是这样的:使用rancher管理的Docker集群,有三台物理主机,二十多个Docker容器,
提供的功能是问题跟踪(JIRA),文档管理(Confluence),代码托管(svn,gitlab),持续集成(jenkins,gitlab-ci + Docker),代码质量管理(Sonar),构件管理(nexus3)和测试管理(TestLink)的功能.服务于1400多个研发人员

前端使用Apache来对后端的服务进行反向代理,同时Apache集成了CAS和LDAP 提供了单点登录的功能

某天下午,用户反馈,应用访问的速度非常的慢,登录的请求也无法响应了.

到Apache所在的主机上看资源的占用,,发现CPU占用率超过500%,apache没有足够的CPU资源来处理请求

通过在主机上ps这个CPU超过500%的进程,发现是一个java的进程,对应的是JIRA的容器

主机上显示的进程号,和容器里边的进程号是不一样的

在容器里,JIRA对应的java进程是进程号为1的进程

进入JIRA容器

dump出来这个进程的所有的线程栈

jstack 1 > jirastack.log

查看这个进程中的占cpu最高的线程

top -Hp 1

得到的结果如下:

可以看到,有8个线程的CPU占用都超过了70左右,合计起来是 500%多

前边的 49,53之类的是和线程栈里边的线程的nxID对应的,只不过,nxID是用十六进制来表示的

我们把这些十进制的数字也变成十六进制

从dump出来的线程栈里边找到了对应的线程:

从线程栈里边搜索 nid=0x31,搜到了以下的线程

我们可以看到,这些都是垃圾回收的线程,垃圾回收的线程占据了所有的CPU的时间

查看JIRA的参数设置,发现了内存的设置较小 -Xms1024m -XmX2048m,使用的垃圾收集器是ParallelGC,因为主机的CPU有8个内核,所以就默认启动了8个垃圾收集器的线程

系统的用户大概有1.4K人,都是开发和测试人员来使用,对比另一个应用 confluence的内存配置(6G的堆大小,G1垃圾收集器),JIRA的堆的配置是有点小了,所以把JIRA的堆内存设置为4G(主机所在的内存还有很多没有使用)然后针对增大的这个堆,启用G1垃圾收集器,然后打印了垃圾收集的日志信息到一个日志文件里边

配置如下:

JVM_MINIMUM_MEMORY 和 JVM_MAXIMUM_MEMORY的值都是4096m

然后,为了防止某个容器占用的资源过多,影响其他的容器(就是开头的时候我们遇到的问题,JIRA占用的CPU过多,导致了apache无法响应请求,其他的应用都无法访问了),所以,我们在rancher上对容器的资源做了一些限制

事后的反思

JIR的jvm参数设置不当和没有对容器占用的主机的资源进行隔离这两个原因共同导致了这个问题的发生

在使用容器作为生产环境的时候,要对自己在容器内所部署的应用的性能和配置参数等有足够的了解,

对Docker容器所在的物理机的CPU和内存等资源所能支撑的容器的数量进行合理的预估,对容器所占用的物理机的资源进行限制,防止容器因配置不当占满物理机的资源,影响其他容器


推荐阅读
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
author-avatar
蓝色水气球_453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有