金宝搏188网址_金博宝网站_金宝搏APP
金宝搏188网址

开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APP

admin admin ⋅ 2019-11-19 20:21:31

当面试官问到你,怎样削减GC暂停时刻的时刻你知道怎样答复吗?

长时刻的 GC 中止对应用程序是晦气的,它会影响服务的 SLA,然后导致糟糕的用户体会,并对中心应用程序的服务形成严峻危害。因而,在本文中,我列出了导致长时刻 GC 中止的要害原因以及处理这些问题的或许的处理方案。

需求学习材料或许面试材料的能够私聊小七,或许在谈论区留言

1. 高速率创立方针

假如你的应用程序的方针创立率很高,那么为了跟上它,废物回收率也将会很高。高废物回收率也会添加 GC 中止时刻。因而,优化应用程序以创立更少的方针是削减长 GC 中止的有用战略。这或许是一个耗时的作业,但百入母三分分百值得去做。为了优化应用程序中的方针创立速率,能够考虑先运用 Java 种子基地剖析器来进行剖析,例如 JProfiler,YourKit 或 JVisualVM,通过这些剖析器可得出以下信息陈述:

  • 创立了哪些方针?
  • 创立丰太阳穴邱立东在线咨询这些方针的速率是多少?
  • 它们在内存中占用多少空间?
  • 谁在创立了它们?

一直测验去优化占用最大内存量的方针。

提示: 怎样核算方针创立速率

将你的 GC 日志上传到通用 GC 日志剖析器东西 GCeasy。该东西将陈述方针创立率。在“方针计算信息”中将列出“均匀创立率”。此项将陈述方针创立率。力求使该值坚持较低。请拜见下图(摘自 GCeasy 生成的陈述的目录),显现“均匀创立速度”为 8.83 mb.sec

2. 年青代空间缺乏

当年青代过小时,方针会过早地提高到老时代。从老时代搜集废物比从年青代搜集废物要花费更多的时刻。因而,添加年青代的巨细有或许削减长时刻的 GC 中止。能够通邪帝圣宠之神医萌后过设置两个 JVM 参数之一来添加年青一代的巨细:

-Xmn :指定年青代的巨细。

-XX:NewRatio :指定年青代相关于老时代的巨细份额。例如,设置 -XX:N苏文漪ewRatio=2 表明年青代与老时代之间的比率为 1:2。年青代的巨细将是整个堆的 1/3。因而,假如堆巨细为 2 GB,则年青代巨细将为 2G / 3 = 667 M阿娇相片B。

3. 挑选 GC 算法

GC 算法对 GC 中止时刻有很大的影响。假如你是 GC 专家或计划成为一个(或你的团队中的有人是 GC 专家),你能够调整 GC 参数装备以取得最佳 GC 中止刘桂娟最新消息时刻。假如你没有很多的 GC 的专业知识,那么我主张运用 G1 GC 算法,因为它有主动调理的才干。在 G1 中,能够运用体系特点 -xx:MaxGCPauseMillis来设置 GC 预期最大中止时刻。例如:

-XX:MaxGCPauseMillis=200

依照上面的比如,最大 GC 中止时刻设置为 200 毫秒。这是一个软方针,JVM 将极力完结它。

4. 进程运用了 Swap

有时因为物理内存缺乏(RAM),操作体系或许会将应用程序暂时不必的数据从内存交流出去。交流动作是十分贵重的,因为它需求拜访磁盘,这比物理内存拜访要慢得多。

依我之见,在出产环境中,任何一个重要的应用程序都不应该交流。当进程运用了 Swap 时,GC 将需求很长的时刻才干完结。

下面的脚本来自 Stack花开堪折txt下载Overflow (感谢作者),当履行脚本时,将显现一切正在发作交流的进程。请保证你的应用程序进程没有运用 Swap。

#!/bin/bash 
# Get current swap usage for all running processes
# Erik 开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APPLjun哦度与gstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
# Modified by Marc Methot 2014-09-18
#测井斜 rem370btoved the need for sudo
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APP`
do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
if (( $SUM > 0 )); then
echo "PID=$PID swapped $SUM KB ($PROG懒汉鱼NAME)"
fi
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL KB"

假如发现进程运用了 Swap 分区,则能够履行下列操作之一:

  • 分配更多的物理内存。
  • 削减在服男人搞基务器上运转的进程的数量,以便它能够开释内存(RAM)。
  • 削减应用程序的堆巨细(我不主张这么做,因为它会导致其他副作用。不过,它或许会处理你的问题)。

5. 调整 GC阮柏霖 线程数

关于 GC 日志中陈述的每个 GC 事情,会打印用户、体系和实践履行时刻。例如:

[Times: user=25.56 sys=0.35, real=20.48 secs]

假如在 GC 事情中,您一直注意到 real 时刻并不显着小于 user 时刻,那么它或许指示没有满足的 GC 线程。考虑添加 GC 线程数。假定 user 时刻为 25尼克杨被捕s,而且将 GC 线程计数装备为 5,那么 real 应该挨近 5s(因为 25s/5=5s)。

正告:添加太多的 GC 线程将耗费很多 CPU,然后占用应用程序的资源。因而,在添加 GC 线程数之前,需求进行充沛的测验。

6. 后台 I/O 活动

假如有开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APP很多的文件体系 I/O 活动(即发作很多的读写操作),也或许导致长时刻的 GC 中止。此繁开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APP重的文件体系 I/O 活动或许不是由应用程序引起的。或许是因为运转在同一服务器上的另一进程形成的。但它仍然会导致应用程序遭受长时刻的 GC 中止。

当有严峻的 I开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APP/O 活动时,你会注意到 real 的时刻显着高于 user 的时刻。例如:

[Times: user=0.20 sys=0.01, real=18.45 secs]

当这种状况发作时,以下是一些或许的处理方案:

  • 假如高 I/O 活动是由应用程序引起的,那么优化它。
  • 消除在服务器上导致高开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APP I/O 活动的进程。
  • 将应用程序移动到 I/O 活动较少的其他服务器。

提示: 怎样监督 I/O 活动

在类 Unix体系 中,你能够运用的 SAR 指令(体系活动状况陈述)监督 开学寄语,竹枝词-金宝搏188网址_金博宝网站_金宝搏APPI/O 活动。例如:

sar -彭连生d -p 1

上面的指令每 1 秒会陈述一次读取/秒和写入/秒的计算数据。有关 SAR 指令的更多细节,能够自行参看相关材料。

7. System.gc() 调用

当调用 System.gc() or Runtime.getRuntime().gc() 办法时,它将导致 stop-the-world 的 Full GC。在 Full GC 期间,整个 JVM 被冻住(即在此期间不会履行任何用户活动)。System.gc() 调用一般来历于以下状况:

  • 开发人员或许会显式地调用 System.gc() 办法。
  • 运用的第三方库、结构,有时乃至是应用程序服务器。其间任何一个都或许调用 System.gc() 办法。
  • 还能够通过运用 JMX 从外部东西(如 VisualVM)触发。
  • 假如你的应用程序正在运用 RMI,那么 R青少年18MI 会定时调用 System.gc() 。能够运用以下体系特点装备此调用距离:
-Dsun.rmi.dgc.server.gcInterval=n 
-Dsun.rmi.dgc.client.gcInterval=n

评价是否显式调用 System.gc() 是肯定必要的。假如不需求,请把它删掉。另一方面,能够通过传递 JVM 参数来强制禁用 S霸爱小魔女ystem.gc() 调用 -XX:+DisableExplicitGC

提示:怎样知道是否显现调用了 System.gc()

将 GC 日志上传到通用 GC 日志剖析器东西GCeasy。此东西有一个名为 GCCauses的部分。假如因为System.gc()调用而触发 GC 活动,则此部分将陈述该状况。请看下图(摘自 GCeasy 生成的陈述目录),显现了 System.gc() 在这个应用程序的生命周期中被做了四次。

正告:一切上述战略只要通过完全的测验和剖析才干推行到出产。一切战略或许不成矫必定适用于你的应用程序。假如不妥运用或许会导致负面的成果。

文章来历,,想知道的在谈论里说,私信我也能够

相关新闻

admin

admin

TA太懒了...暂时没有任何简介

精彩新闻