一日凌晨,手机疯狂报警,短信以摧枯拉朽之势瞬间以百条的速度到达,我在睡梦中被惊醒,看到短信的部分内容如下:
Jira和Confluence部署在同一台服务器上,跑一段时间后,发现访问jira和confluence时,打开越来越缓慢。这是因为根据主机物理内存不同,默认的java虚拟机内存也会不同(一个较低值),有时候不够用,可以修改JAVA默认的JVM内存设置,改善内存不足导致的问题。操作如下:
首先通过我们内部搭建的日志平台发现我们线上环境一个java应用有大量的http接口请求超时,登录linux服务器查看网络环境没有问题,判断是应用自身运行异常,重启应用后发现异常还在,开始查找问题。
本人所在公司有一个系统部署单个tomcat上,该系统由前开发人员开发。本人于两年前接手,在对该系统进行开发运维过程中,先后解决了两种tomcat宕机无法提供服务情况,具体如下:
1.参数的含义 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了 -Xms128m JVM初始分配的堆内存 -Xmx512m JVM最大允许分配的堆内存,按需分配 -XX:PermSize=64M JVM初始分配的非堆内存 -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。
Resin是一个提供高性能的,支持 Java/PHP 的应用服务器。目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者、开发人员和低流量网站使用;一种是收费的专业版本,增加了一些更加适用于生产环境的特性。
如题,本文针对工作中实际经验,整理了把一个单体架构的系统升级成集群架构需要做的准备工作,以及为集群架构的升级做指导方针。
在K8S环境通过helm部署了Jenkins(namespace为helm-jenkins),用于日常Java项目构建:
Zabbix自带监控系统的内存利用率和CPU利用率,但是系统内存并不能反应JVM内存情况
动态定时任务,就是在不重启服务的状态下,可以做到继续添加,更新已有,删除已有任务。定时任务有很多实现的方式,包括timer,timertask,scheduledexecutorservice,以及第三方框架Quartz。本篇文章主要介绍SpringBoot整合Quartz实现动态定时任务。
如果我们所在公司的业务量比较大,在生产环境经常会出现JVM内存溢出的现象,那我们该如何快速响应,快速定位,快速恢复问题呢?
前言 《HDFS NameNode内存全景》中,我们从NameNode内部数据结构的视角,对它的内存全景及几个关键数据结构进行了简单解读,并结合实际场景介绍了NameNode可能遇到的问题,还有业界进行横向扩展方面的多种可借鉴解决方案。 事实上,对NameNode实施横向扩展前,会面临常驻内存随数据规模持续增长的情况,为此需要经历不断调整NameNode内存的堆空间大小的过程,期间会遇到几个问题: 当前内存空间预期能够支撑多长时间。 何时调整堆空间以应对数据规模增长。 增加多大堆空间。 另一方面NameNo
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 这里有几个问题: 1. 各个参数的含义什么? 2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动? 3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置? 下面我们一一进行回答 1. 各个参数的含义什么? 参数中-vmargs的意思是设置JVM参数
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 这里有几个问题: 1. 各个参数的含义什么? 2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动? 3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置? 下面我们一一进行回答 1. 各个参数的含义什么?
打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions 文件,需针对不同的JDK进行配置:
最近正在进行从Spring Boot往Spring Cloud上改造升级。之前部署的应用程序比较少,还没什么问题。当Spring Cloud项目逐步新增之后,问题就爆发了,服务器内存不够用了。而现有的用户体量也没必要对服务器再次进行升级,于是就开始着手Spring Boot启动时JVM内存配置的优化。
前提:某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。
JVM中, 所有对象都是在堆中分配内存空间的,栈只用于保存局部变量和临时变量,如果是对象,只保存引用,实际内存还是在堆中;一个java对象占用的内存空间,除了一个固定大小的空间用于描述这个对象属于哪个类,其它的就用于保存它的字段的值;默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
研发工程师日常的工作除了开发实现新需求之外,排查定位问题也是重要的组成部分。如果在发生线上故障的时能够快速定位线上bug并且修复bug,不仅是研发工程师技术能力的重要体现,同时也可以帮助线上及时止血避免平台故障进一步蔓延,从而导致影响用户体验或者产生不可挽回的资损。但是实际上很多研发工程师由于工作经验还不充足,导致经常在遇到问题的时候不知所措,不知道该如何分析排查定位问题。因此本文主要聚焦日常工作中经常遇到的异常场景,梳理了问题排查定位的思路大图,这样大家在实际项目中如果遇到类似的异常场景,可以按照思路大图进行问题排查定位解决,相信大家掌握了故障定位的分析套路之后就可以做到遇到问题时临危不乱。
通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。
导读:本文记录一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程,总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
简单地说,ZooKeeper的连接与会话就是客户端通过实例化ZooKeeper对象来实现客户端与服务器创建并保持TCP连接的过程。本质上,Session就是一个TCP 长连接。
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
我们知道,java进程中的线程,是直接映射到服务的线程上,当创建的线程过多时,创建线程会失败,现象如下:
公司的业务量比较大,在生产环境如果经常出现OOM(Out Of Memory,JVM内存溢出)的现象,那该如何快速响应,快速定位,快速恢复问题呢?
使用TYPE=forge游戏模式时,将mod放置到Docker挂载出的minecraft-data/mods文件夹,重启minecraft容器即可
今天准备谈下AIOps的内容,在我前面已经写过多篇文章谈DevOps研发运维一体化方面的内容,原来也一直看到AIOps的概念,潜意识里面理解是DevOps里面的一个子内容分解。而实际我们看到AIOps和DevOps没有必然的联系。
使用 top 指令,服务器中 CPU 和 内存的使用情况,-H 可以按 CPU 使用率降序,-M 内存使用率降序。排除其他进程占用过高的硬件资源,对 Java 服务造成影响。
线上运行的Java应用突然没有响应、响应缓慢,进程突然消失,遇到这些情况应该如何应对呢?
很多年以前,当我还是一个开发菜鸟的时候,觉得写代码是很牛逼并且很关键的事情,当听到有人说做一个项目或者开发一个系统,代码的编写工作只占其中30%的工作量时,当时的我对此说法嗤之以鼻,感觉开发工作受到了侮辱。后来,自己开始做技术leader、项目经理、做架构,慢慢认识到软件开发是一个系统工程,代码编写真的只是其中的一环,而且如果代码写不好测试不到位的话,那就是噩梦的开始。经历过多次噩梦洗礼之后,认清一个现实:CRUD,Ctrl c,Ctrl v,这不是高科技。开发与测试/运营/业务,不是对立关系,而应该相辅相成,如果开发人员对代码抱有敬畏之心,明白每行代码会带来什么样的系统行为,对测试/运营/业务抱有开放包容的心态,对他们的挑刺当成一种鞭策和挑战,写出更加“美丽”的代码,那这样的开发人员将是任何公司的财富。
(2)此内存区域是唯一一个在 JAVA 虚拟机规范中没有规定任何 OutOfMemoryError 的区域。
如何在高性能服务器上进行JVM调优? 为了充分利用高性能服务器的硬件资源,有两种JVM调优方案,它们都有各自的优缺点,需要根据具体的情况进行选择。 1. 采用64位操作系统,并为JVM分配大内存 我们知道,如果JVM中堆内存太小,那么就会频繁地发生垃圾回收,而垃圾回收都会伴随不同程度的程序停顿,因此,如果扩大堆内存的话可以减少垃圾回收的频率,从而避免程序的停顿。 因此,人们自然而然想到扩大内存容量。而32位操作系统理论上最大只支持4G内存,64位操作系统最大能支持128G内存,因此我们可以使用64位操作系
公司众多系统中有一个系统使用的是 CMS 垃圾回收器,JVM 初始堆内存不等于最大堆内存,但通过监控信息发现:在经过一次 FullGC 之后,服务器物理内存剩余空间并未提升,运维同事告诉我说,有内存泄露,因为 GC 了之后,内存并没有被释放。按照大部分人的理解,FullGC 之后 JVM 进程会释放的内存一部分还给物理内存,下面通过几个实验来对比验证一下 CMS 和 G1 的物理内存归还机制。
1、CPU,如果存在大量的计算,他们会长时间不间断的占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题,例如频繁的FullGC,以及多线程造成的上下文频繁的切换,都会导致CPU繁忙,一般情况下CPU使用率<75%比较合适。 2、内存,Java内存一般是通过jvm内存进行分配的,主要是用jvm中堆内存来存储Java创建的对象。内存的读写速度非常快,但是内存空间又是有限的,当内存空间被占满,对象无法回收时,就会导致内存溢出或内存泄漏。 3、磁盘I/O,磁盘的存储空间要比内存存储空间大很多,但是磁盘的读写速度比内存慢,虽然现在引入SSD固态硬盘,但是还是无法跟内存速度相比。 4、网络,带宽的大小,会对传输数据有很大影响,当并发量增加时,网络很容易就会成为瓶颈。 5、异常,Java程序,抛出异常,要对异常进行捕获,这个过程要消耗性能,如果在高并发的情况下,持续进行异常处理,系统的性能会受影响。 6、数据库,数据库的操作一般涉及磁盘I/O的读写,大量的数据库读写操作,会导致磁盘I/O性能瓶颈,进而导致数据库操作延迟。 7、当在并发编程的时候,经常会用多线程操作同一个资源,这个时候为了保证数据的原子性,就要使用到锁,锁的使用会带来上下文切换,从而带来性能开销,在JDK1.6之后新增了偏向锁、自旋锁、轻量级锁、锁粗化、锁消除。
这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。您可以选择自己的需要选择不同的操作系统和对应的JDK的版本,但还是推荐您使用Sun公司发布的JDK。
JVM内存泄露是Java应用程序中常见的问题之一。当应用程序在运行时,如果没有正确地释放内存,就会导致内存泄露。这会导致应用程序的性能下降,甚至会导致应用程序崩溃。本文将分享一次对腾讯云COS SDK线上内存泄漏问题排查的过程。并对Java泄漏问题的处理方法进行一些总结,期望能帮助到正在被Java内存泄漏困扰着的同学。
线上问题排查相比于coding,是一个低频的工作,很多人不会经常遇到。一旦需要进行问题排查的时候,往往是重要且紧急的,因此问题排查的效率,就显得尤为重要。有些线上问题,比较直观,比如磁盘使用率高、网络流量高这种,借助合适的工具很快能定位到原因;但对于一些复杂的问题,如系统Load高、RSS占用高、内存溢出等,需要结合多方面的数据才能定位到原因。这时候,需要有正确的解题思路,并辅以合适的工具,才能高效地解决问题。
最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家。 这两天在“小怪的java群”里面也对JVM内容进行了一个讨论,讨论的内容主要包括如下几个方面: 1)内存溢出和内存泄露的介绍? 2)如何排查和处理内存泄露? 一、内存溢出和内存泄露 一种通俗的说法。 1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。 2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是
最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家。 这两天对JVM内容进行了一个讨论,讨论的内容主要包括如下几个方面。 1)内存溢出和内存泄露的介绍? 2)如何排查和处理内存泄露? 一、内存溢出和内存泄露 一种通俗的说法。 1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。 2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是因为一直被某个或某些实例所持
最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家。
公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。
Tech 导读 本文介绍了长连接服务中使用Netty框架,对内存泄漏问题的排查、复现、解决的案例,是研发开发中非常典型的实战问题解决。同时本文介绍了Netty中对象的引用计数机制,并总结了Netty内存泄漏问题的排查方案。 (本文作者以第一人称视角写作)
Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个Java虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给APP。当APP需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。
某些对象或者数据没有利用价值了,但是由于某些原因占用着内存,无法被回收,就造成了内存泄漏。
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功。对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后,内功就更主要了。一个内功低的人招式在奇妙也打不过一个内功高的人。比如,你剑法再厉害,一剑刺过来,别人一掌打断你的剑,你还怎么使剑法,你一掌打到一个武功高的人身上,那人没什么事,却把你震伤了,你还怎么打。同样两者也是相辅相成的,内功深厚之后,原来普通的一招一式威力也会倍增。 对于搞开发的我们其实也是一样,现在流
对于业务系统的性能优化,除了上面谈到的标准分析流程和分析要素外,再谈下其它一些性能问题引发的关键思考。
今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。
领取专属 10元无门槛券
手把手带您无忧上云