jvm调优有什么技巧?
场景一、CPU过高
CPU占用过高排查思路:(查进程->查线程列表->查线程堆栈)
<>step1:通过top命令查询占用CPU情况>
p.s.shift+p(大写的P-cpu排序)shift+m(大写的M-内存排序)
<>step2:通过进程pid,查询对应的线程列表>
CPU占用过高排查思路:(查进程->查线程列表->查线程堆栈)
<>step1:通过top命令查询占用CPU情况>
p.s.shift+p(大写的P-cpu排序)shift+m(大写的M-内存排序)
<>step2:通过进程pid,查询对应的线程列表>
<>step3:线程id转为十六进制>
从step2中可以看到占用cpu较高的线程id,打印出十六进制
<>step4:通过jstack查出线程栈信息>
cpu过高主要是线程方面的问题,我们知道jvm中每个线程都分配了单的栈,我们可以通过jstack查看线程栈情况。
p.s.这里的pid为进程id,也就是第一步top中的pid
对照着step3中占用cpu最高的线程十六进制值可以定位到线程的栈信息。
上图可以看到具体定位到了ja的代码,就可以具体分析一下这个ja代码为什么会创建大量的线程占用大量的cpu。
除了ja程序线程问题,cpu过高也可能是线程死锁造成的,我们通过jstack也可以查看线程死锁的情况。
<>step5:通过jstack查看情况死锁情况>
-l:除了线程列表外,还显示关于锁的附加信息
通过栈中的信息可以定位到代码中死锁的代码。
<>step6:通过jstat查看gc情况>
除了以上的各种情况,还有一种就是ja频繁的gc也会造成cpu占用过高
1000ms为刷新数据的间隔时间
如果有频繁的gc就可以分析堆数据中哪些对象创建的较多,就可以具体分析了。
排查思路:(查进程->jvm内存占用)
<>step1:通过top命令查询占用CPU情况>
p.s.shift+p(大写的P-cpu排序)shift+m(大写的M-内存排序)
<>step2:通过进程pid查看gc情况>
以下是该命令的输出结果说明:
以上各个区域的使用情况都会以百分的形式进行显示,即0.0%~100.0%之间。
例如,如果输出结果为“40.0020.0060.0070.00100.00”,则表示:
<>step3:通过jmap查看堆情况>
通过step2已经发现jvm中的数据过多,频繁的ygc并且大量的数据都在老年代没有回收,这样就会表现出内存占用过高。下一步就是分析那些对象占用了内存。
jmap-histo命令可以用于输出Ja堆内存中各个对象类型及其数量的计信息。具体说明如下: 可以看到org.example.User创建的较多。这相就可以具体分析一下代码中哪些地方创建了User为什么没被回收。 与jmap-histo类似的命令: jmap-dump命令可以用于生成Ja进程的内存快照文件(.hprof格式),以便进行后续的分析和调试。具体说明如下: 导出的快照文件可以通过jvisualvm或mat来查看: mat还较智能,直接把存在问题的给你列出来 <>step4:jmap-heapjvm内存实际占用情况> 除了以上内存占用情况,在ja项目中还存在一种情况。如我ja项目没有配置jvm参数都使用默认的配置,我64G内存。会发现用一段时间后ja进程占用了8G内存。这时你可以使用命令看看ja实际使用的内存情况,然后再调整jvm参数。 jmap-heap是一个用于获取Ja堆内存信息的命令行工具,它可以输出Ja虚拟机中堆内存的使用情况和配置信息。 1、贝贝BiliBili - B站视频下载https://xbeibeix.com/api/bilibili/贝贝BiliBili 是个免费、免登录的bilibili视频下载工具,没有任何套路。把视频链接粘贴进去 → 输入验证码 → 解析视... 要弄清楚这个问题,首先要弄清楚什么是内存,什么是硬盘,在计算机的组成结构中有一个很重要的部分是存储器。它是用来存储程序和数据的部件。对于计算机来说,有了存储器,才有记忆功能,,才能保证正常工作。存储器的种类很多。按其用途可分为主存储器与辅助... 1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达更高... 用上了高端的Mac(已退货)才知道:原来文件夹里面的文件,你看到是8个,其实可能有12个。其中3个图标重叠在一起了,另外一个被拖动到屏幕外面了。用上了高端的Mac(已退货)才知道:原来鼠标灵敏度有问题是因为系统内置了鼠标加速度,只能用控制台... 虽然很多答主用了诸如“典范级”、“心旷神怡” 的形容, 赞美这段代码, 但这里, 出于技术讨论的动机, 我说说不同看法.栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法. 泛型,... 搜索引擎优化 (SEO) 的目标是让 Google 在用户输入相关搜索查询时提供您的网页链接。虽然没有固定的蓝图可以保证您获得最高排名,但有几种 SEO 最佳实践(您可以将其视为 SEO 规则)可以增加您在非付费结果中获得良好排名的机会。谷...相关文章
网页上的视频怎么下载呀?
内存和硬盘的单位都是G,两者的功能是什么?谁能用简单通俗的方式来解读一下?
抖音和快手最大的区别是什么?
有哪些是你用上了mac才知道的事?
无意中发现技术主管写的代码,大家帮忙看看什么水平?
有没有高手指点一下Google做SEO现在的技巧啊?心好累。
发表评论
![]()