whereis搜索redis服务执行文件:whereis redis-server
这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。
jstat用法 其中-gc可以换成-class 、-gcnew、-gcold等参数;而54992表示的JVM的进程id(可能通过上面的jps命令查看) ;4s表求每4秒打印一次,后面的3表求共打印三次。 打印的各参数含义如下: 1:S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used) 2:EC、EU:Eden区容量和使用量 3:OC、OU:年老代容量和使用量 4:MC、MU:元数据区容量和使用量 5:CCSC、CCSU:压缩类空间容量和使用量 5:YGC、YGT:年轻代GC次数和GC耗时 6:FGC、FGCT:Full GC次数和Full GC耗时 7:GCT:GC总耗时 jstat可以用来判断系统是否出现了内存泄漏,方法是通过一短长时间的观察OU的增长情况,如果OU稳定增长,则有可能出现内存泄漏。
目前采用微服务架构已经逐渐成为企业架构的标准范式,而大多微服务是基于Spring Cloud框架来进行应用的构建的,所以在开发实践中,甚至生产环境中,会遇到java相关问题,例如系统运行变慢、内存OOM,堆栈异常等问题,这里结合我之前的一些实践提供一些相关工具,和大家一起分享我们的诊断思路和解决技巧。
前面介绍了JVM相关的内存和线程相关的技术。对于JVM也算有了一个比较系统、完整的理论基础。理论总是作为指导实践的工具,但是从理论到实践,总会遇到一些虚拟机相关问题,故障。所以还需要学习一些常用的JVM排障工具,和一些常见的调优手段。
在前面的几篇文章已经讲解了利用一些可视化的工具进行 JVM 性能的监控,但是,在服务器上,我们很多时候是没有办法使用可视化的界面进行这种工作的,这种情景就相当于你需要远程的 linux 系统一样,我们没有其他的办法,只有一种办法就是利用命令行进行操控,而当我们将我们的项目部署到远程的服务器上的时候,我们是没有办法利用可视化的工具对 JVM 进行有效的监控的,这个时候 JDK 的自带的工具就是发挥发的作用的时候了。
DK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人
Java 凭借着自身活跃的开源社区和完善的生态优势,在过去的二十几年一直是最受欢迎的编程语言之一。步入云原生时代,蓬勃发展的云原生技术释放云计算红利,推动业务进行云原生化改造,加速企业数字化转型。
最近正在进行从Spring Boot往Spring Cloud上改造升级。之前部署的应用程序比较少,还没什么问题。当Spring Cloud项目逐步新增之后,问题就爆发了,服务器内存不够用了。而现有的用户体量也没必要对服务器再次进行升级,于是就开始着手Spring Boot启动时JVM内存配置的优化。
JVM性能调优牵扯到各方面的取舍与平衡,往往是牵一发而动全身,需要全盘考虑各方面的影响。在优化时候,切勿凭感觉或经验主义进行调整,而是需要通过系统运行的客观数据指标,不断找到最优解。同时,在进行性能调优前,您需要理解并掌握以下的相关基础理论知识:
(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)
“ 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据和定位解决问题的速度,但我们在学习工具前,也应当意识到工具永远都是知识技能的一层包装,没有什么工具是“秘密武器”,学会了就能包医百病”
一日凌晨,手机疯狂报警,短信以摧枯拉朽之势瞬间以百条的速度到达,我在睡梦中被惊醒,看到短信的部分内容如下:
Prometheus通过expoeter监控Elasticsearch集群,比传统的APM或者zabbix监控更加深入;配合exporter可已经详细监控这个es集群的信息。
在实际的故障排查、性能监控中,常常是操作系统的工具和Java虚拟机的工具结合使用。
格式:-XX:[+-]表示启用或者禁用name属性比如:-XX:+UseConcMarkSweepGC 启用CMS垃圾回收器 -XX:+UseG1GC 启用G1垃圾回收器
有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位。这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手。
(2)stack - 输出当前方法被调用的调用路径, 一个方法被执行的路径非常多,不知道这个方法是从那里被执行,就可以采用
在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢?
java 程序是运行在jvm 虚拟机里面的,离开jvm虚拟机,那么java程序无法直接在linux平台的运行。 所以java应用程序和os 平台之间是隔着jvm虚拟机的。 所谓的jvm虚拟机,本质上就是一个进程,此时它的内存模型和普通的进程有相同之处,但它又是java程序的管理者,所以它又有自己独特的内存模型. 从os层面来看jvm的进程,其内存模型包含如下几个部分: 内核内存 + jvm的code + jvm的data + jvm的 heap + jvm的stack + unused memory. 其中的heap, stack 就是我们常说的“堆栈” 空间. 我们更多需要从jvm作为java程序管理者的角度来看其内存模型: 此时jvm的内存空间可以分为两大类,分别是 “堆内存” 以及“非堆内存”,其中前者是可以分配给java程序使用的,而后者则是jvm进程自己使用的。 所以“堆内存”是我们要讨论的重点:
在tomcat的bin目录下面有很多可以执行的脚步,执行的脚步分为windows环境和Linux环境! 如果在windows环境配置jvm参数,catalina.bat如下:
对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的。各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题。楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢?
在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方便微服务部署。 2. 方便项目启动,不需要下载Tomcat或者Jetty
到目前为止,我们已经对 Jvm 进行了简单的了解,知道了 Jvm 运行时各种各样的内存结构,各种垃圾回收机制以及各种对应的垃圾收集器及其配置。而我们整个 Jvm 系列的最终目标不当仅仅以了解基础理论为终点,理论总应作为实践的工具。接下来,我们开始了解 Java 性能优化的最后一环:Jvm 性能调优。
Tomcat调优是一个老话题,目的都是为了提高站点的吞吐和并发。这里面涉及到Tomcat本身参数的优化和JVM优化。近期在研究JVM的参数设置和Tomcat集群,所以进行了一下调优实践。需要说明的是:本文的配置肯定不是最好的,仅仅是一次实践和一次记录。步骤可以参考,但参数设置需要针对不同需求的项目来进行调整。 1、安装APR(Apache Portable Runtime) Tomcat 7 以后 Connector 默认启用 APR 协议,但是只有配置了 APR库才可以生效,否则还是会使用 BIO 或者N
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor。大家可能了解到它的原理,甚至看过它的源码;但是就像我一样,大家可能对它的作用存在误解。现在问题来了,jdk为什么要提供java线程池?使用java线程池对于每次都创建一个新Thread有什么优势?
最近参加面试经常被面试官问到有没有遇到过线上人内存溢出(OOM)的问题?遇到过的化你是怎么定位是哪个线程下哪些对象占用你内存太多造成的?提出这个问题其实面试官就是用来考察你到底有没有JVM调优经验。如果你在工作中并没有JVM方面的经验,也没有仔细看过线上定位和OOM问题的文章,那么99.9%这道题你要凉凉!
JVM大家可能都知道是个什么玩意-Java虚拟机,但是到底是个什么鬼?相信即使工作3-5年的程序员可能也不大了解。
表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高
在启动一个Springboot工程时,抛出一项“Cannot allocate memory”异常,很明显,是因为内存分配原因导致的OOM异常导致JVM宕掉。跟随log,查看JVM hs_err_pid24442.log文件。
链接:[#link]( https://www.cnblogs.com/duanxz/p/3482366.html )
JVM大家可能都知道是个什么玩意-Java虚拟机,但是到底是个什么鬼?相信即使工作3-5年的程序员可能也不大了解。 如题所述,今天与大家分享的是如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题。
原文地址:https://www.cnblogs.com/superfj/p/8667977.html
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择)。本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。
前言 对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈 jps JVM Process Status Tool的缩写,JVM进程状况工具。 主要功能: 列出正在运行的java进程,并显示执行主类的名称及进程在本地JVM中的ID。 与ps命令相似,可以查看java进程ID(LVMID)。 使用方法: jps [options][hostid] [options]:-q: 只输出LVMID -m: 输出JVM启动时传给主类的方
介绍 在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方便微服务部署。 2. 方便项目启动,不需要下载Tomcat或者Jetty 针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点 线程数 超时时间 jvm优化 针对上述的优化点来说,首先线程数是一个重点,初始线程数和最大线程数,初始线程数保障启动的时候,如果有大量用户访问,能够很稳定的接受请求, 而最大线程数量用来保证系统的稳定性,而超时时间用来保障
我们都知道,黑匣子是用于记录飞机飞行和性能参数的仪器。在飞机出问题后,用于定位问题原因。JFR 就是 Java 的黑匣子。
什么是堆栈?在思考如何找堆栈溢出漏洞之前,先来弄懂什么是堆栈。Java的数据类型在执行过程中存储在两种不同形式的内存中:栈(stack)和堆(deap),由运行Java虚拟机(JVM)的底层平台维护。
本文将通过一次jvm内存分析过程来说明jps、jcmd、jstat、jstack 和 jmap 工具的使用方法。
导读:手上有一个测试服务器,内存是8G,最近开始搭起微服务的软件架构,单个Spring Boot 服务内存占用有点大,比如一个RocketMq的消费者服务(单独运行的服务),启动占用了 500M 内存,导致我后面想运行其他服务,内存不够,触发了 Linux 的 OOM - Killer 机制
之前或多或少分享过一些内存模型、对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义。
领取专属 10元无门槛券
手把手带您无忧上云