您的位置:首页 > 其它

JVM系列之 -------------------- jvm调优

2018-12-22 22:48 92 查看

一、用到的jvm调优工具:jps、jstack、jmap、jhat、jstat、top,这些工具用来监控进程和Java堆栈信息。

            1.jps(Java虚拟机进程状态工具),该工具可以用来查看进程名和pid,以及jvm的配置参数。

[code]jps -l
10369 sun.tools.jps.Jps

             -l  :操作是用来查看jvm下的Java进程pid和进程名

             -q :只显示jvm下的pid

             -m:显示传入main方法的args

             -v :显示jvm的配置参数

[code]jps -v
10400 Jps -Denv.class.path=.:/usr/java/jdk1.8.0_171/lib/dt.jar:/usr/java/jdk1.8.0_171/lib/tools.jar -Dapplication.home=/usr/java/jdk1.8.0_171 -Xms8m

              -Xms8m : 设置该进程的最小内存为8M

 

           2.jstack (java堆栈) , 该工具可以用来监控Java进程内的线程的堆栈信息,该操作有3个参数,其功能如下

[code]Options:
-F  to force(强制) a thread dump. Use when jstack <pid> does not respond (process is hung)
-m  to print both java and native frames(帧) (mixed(混合) mode(模式))
-l  long listing. Prints additional(额外) information about locks

              一个定位问题的实例:

[code]1.查看进程pid :jps -l ,假设pid=12345
2.查看该进程中使用cpu资源最高的线程pid :top -Hp 12345 ,假设线程的pid=45678
3.计算该线程pid的十六进制 :printf "%x\n" 45678 , 假设为 :b26e
4.查看进程中指定线程的堆栈信息 :jstack 12345 | grep b26e
这样就可以定位到该进程是什么原因导致的cpu利用率过高

              3.jmap (Java memory map) ,监控Java进程中的对象 ,jhat 和 jmap相似。

[code]Options:
-heap 打印堆栈信息
-histo [:live] 打印类数据和内存占用信息,live为可选参数,表示只查看存货的对象

B byte
C char
D double
F float
I int
J long
Z boolean

                 4.jstat(java堆栈实时监控工具)

[code]-class          监控类加载
-compiler       监控即时编译
-gc             监控堆栈状态垃圾收集情况,gc日志中中的时间是以秒为单位
-gccapacity     监控堆栈容量
-gccause        监控gc原因
-gcnew          监控新生代gc
-gcnewcapacity  监控新生代容量
-gcold          监控年老带gc
-gcoldcapacity  监控年老带容量

jstat -gc 12345 5000:表示监控pid=12345的进程的gc,每5秒监控一次

二、查看cpu信息:cat /proc/cpuinfo(处理器cpu信息)

       该查询可以看到processor的核心数等cpu信息

[code][root@huasuo-host ~]# cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
stepping	: 7
microcode	: 0x29
cpu MHz		: 799.749
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts
bogomips	: 4589.58
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz

       

三、jvm内存和设置

       堆内存 = 年轻代 + 年老代 + 永久代

       年轻代 = Eden区 + 两个survivor区

       -Xmx2g :设置jvm的最大堆内存为2g

       -Xms500m :设置jvm的最小堆内存为:500M

       -survivorRatio=4 :设置Eden区和两个survivor区的容量比例为 4:3:3

      -XX:+PrintGCDetails

      -XX:+PrintGCDateStamps

      -XX:+PrintGCTimeStamps

      -Xloggc:file 在jvm的启动参数中添加该指令,设置讲gc日志打印到指定的file文件中

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: