自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實(shí)例解析JVM內(nèi)存監(jiān)控流程

開發(fā) 后端
本文通過實(shí)例向大家介紹一下JVM內(nèi)存監(jiān)控的流程,由于在建項(xiàng)目的需要,監(jiān)控tomcat的內(nèi)存使用,檢查內(nèi)存泄漏的情況,相信你一定會感興趣。

你對JVM內(nèi)存監(jiān)控是否熟悉,這里向大家簡單描述一下,本文是親自測試的詳細(xì)配置過程,不是轉(zhuǎn)載而且linux下不需修改/etc/hosts文件,其實(shí)JDK自身已經(jīng)提供了很多工具,都在JAVA_HOME/bin/目錄下:jvisualvm、jconsole、jstatd、jmap等等。

JVM內(nèi)存監(jiān)控流程

本文是親自測試的詳細(xì)配置過程,不是轉(zhuǎn)載而且linux下不需修改/etc/hosts文件,由于在建項(xiàng)目的需要,監(jiān)控tomcat的內(nèi)存使用,檢查內(nèi)存泄漏的情況。其實(shí)JDK自身已經(jīng)提供了很多工具,都在JAVA_HOME/bin/目錄下:jvisualvm、jconsole、jstatd、jmap等等,以下為試驗(yàn)的環(huán)境配置:

client:vista、jdk1.6.0_18
server:linux、jdk1.6.0_02、tomcat6、IP:192.168.8.7

主要從下面三個(gè)方面描述JVM內(nèi)存監(jiān)控流程:

◆jmap(MemoryMap)JVM內(nèi)存對象打印工具

◆jstatd配置

◆Tomcat配置JMX

一、用jmap獲取數(shù)據(jù)查看JVM內(nèi)存監(jiān)控

JAVA_HOME/bin/jmap-histoPID
JAVA_HOME/bin/jmap-histoPID>hismem.txt
顯示信息包括Java類、類實(shí)例對象數(shù)量、在內(nèi)存中占有量的大小以及類的完整包名。

//將JVM內(nèi)存堆的信息dump成為一個(gè)二進(jìn)制文件,可供jstat、EclipseMAT內(nèi)存分析工具來使用
JAVA_HOME/bin/jmap-dump:format=b,file=heap.binPID
EclipseMAT的分析工具:http://www.eclipse.org/mat/#p#

二:jstatd配置

需要在被JVM內(nèi)存監(jiān)控的服務(wù)器上面,通過jstatd來啟動RMI服務(wù)。
新建個(gè)文件jstatd.all.policy文件內(nèi)容如下:
Java代碼 

  1. grantcodebase"file:${java.home}/../lib/tools.jar"{  
  2. permissionjava.security.AllPermission;  
  3. };    
  4.  

 啟動命令如下:
Java代碼 

  1. //默認(rèn)端口為1099  
  2. jstatdjstatd-J-Djava.security.policy=jstatd.all.policy  
  3. //指定hostname一般情況需要重新指定hostname,否則連接不成功  
  4. jstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  5. -J-Djava.security.policy=test/jstatd.all.policy  
  6. //指定hostname指定端口  
  7. jstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  8. -J-Djava.security.policy=test/jstatd.all.policy-p8888  
  9. //啟動JMX  
  10. jstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  11. -J-Djava.security.policy=test/jstatd.all.policy  
  12. -J-Dcom.sun.management.jmxremote.port=8888 
  13. -J-Dcom.sun.management.jmxremote.ssl=false 
  14. -J-Dcom.sun.management.jmxremote.authenticate=false 
  15. //后臺啟動  
  16. nohupjstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  17. -J-Djava.security.policy=test/jstatd.all.policy-p8888&  
  18.  
  19. //默認(rèn)端口為1099  
  20. jstatdjstatd-J-Djava.security.policy=jstatd.all.policy  
  21. //指定hostname一般情況需要重新指定hostname,否則連接不成功  
  22. jstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  23. -J-Djava.security.policy=test/jstatd.all.policy  
  24. //指定hostname指定端口  
  25. jstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  26. -J-Djava.security.policy=test/jstatd.all.policy-p8888  
  27. //啟動JMX  
  28. jstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  29. -J-Djava.security.policy=test/jstatd.all.policy  
  30. -J-Dcom.sun.management.jmxremote.port=8888 
  31. -J-Dcom.sun.management.jmxremote.ssl=false 
  32. -J-Dcom.sun.management.jmxremote.authenticate=false 
  33. //后臺啟動  
  34. nohupjstatd-J-Djava.rmi.server.hostname=192.168.8.7  
  35. -J-Djava.security.policy=test/jstatd.all.policy-p8888&  

 啟動通過:netstat-an|grep8888可以查看端口是否已經(jīng)被監(jiān)聽,用JAVA_HOME/bin/jmap查看java進(jìn)程:
Java代碼 

  1. //查看本機(jī)的情況  
  2. jps  
  3. //查看遠(yuǎn)程計(jì)算機(jī)192.168.8.7的情況(默認(rèn)1099端口)  
  4. jps192.168.8.7  
  5. //查看遠(yuǎn)程計(jì)算機(jī)192.168.8.78888端口  
  6. jpsrmi://192.168.8.7:8888  

 打開jvisualvm界面如下:

jvisualvm界面

右擊遠(yuǎn)程選擇添加遠(yuǎn)程主機(jī):

添加遠(yuǎn)程主機(jī)

如果重新指定了jstatd端口,選擇高級設(shè)置修改端口,如下圖:

高級設(shè)置

如果同時(shí)配置了JMX,可以在添加JMX連接如下圖:

添加JMX連接

添加后如圖所示:

#p#

三:Tomcat配置JMX實(shí)現(xiàn)JVM內(nèi)存監(jiān)控

用hostname-i查看是否為127.0.0.1,這步非常重要,否則會連接失敗,如果是,必須要配置-Djava.rmi.server.hostname比如我的配置為-Djava.rmi.server.hostname=192.168.8.7,而不需要修改hosts文件,修改此文件還可能影響到其他程序。
只需要在TOMCAT_HOME/bin/找到catalina.sh加上以下參數(shù),重新啟動tomcat就可以了:

Xml代碼 

  1. JAVA_OPTS="$JAVA_OPTS-Djava.rmi.server.hostname=192.168.8.7  
  2. -Dcom.sun.management.jmxremote.port=8088 
  3. -Dcom.sun.management.jmxremote.ssl=false 
  4. -Dcom.sun.management.jmxremote.authenticate=false"  
  5.  
  6. JAVA_OPTS="$JAVA_OPTS-Djava.rmi.server.hostname=192.168.8.7  
  7. -Dcom.sun.management.jmxremote.port=8088 
  8. -Dcom.sun.management.jmxremote.ssl=false 
  9. -Dcom.sun.management.jmxremote.authenticate=false"  
  10.  

 打開JAVA_HOME/bin/下的jvisualvm或者jconsole的工具可以直接連接了,如下圖visualvm連接的示意圖:

visualvm連接的示意圖

也可以寫個(gè)Java類TestJMXClient.java測試下JMX連接是否成功:

Java代碼 

  1. importjava.util.HashMap;  
  2. importjava.util.Map;  
  3.  
  4. importjavax.management.MBeanServerConnection;  
  5. importjavax.management.remote.JMXConnector;  
  6. importjavax.management.remote.JMXConnectorFactory;  
  7. importjavax.management.remote.JMXServiceURL;  
  8.  
  9. /**  
  10. *@authorMichael  
  11. */  
  12. publicclassTestJMXClient{  
  13.  
  14. /**  
  15. *@paramargs  
  16. */  
  17. publicstaticvoidmain(String[]args){  
  18. try{  
  19. StringjndiPath="jmxrmi";  
  20. Stringserverhost="192.168.8.7";  
  21. Stringserverport="8088";  
  22. //url=service:jmx:rmi:///jndi/rmi://192.168.8.7:8088/jmxrmi  
  23. Stringjmxurl="service:jmx:rmi:///jndi/rmi://"+serverhost+":"  
  24. +serverport+"/"+jndiPath;  
  25. System.out.println("jmxurl:"+jmxurl);  
  26. JMXServiceURLurl=newJMXServiceURL(jmxurl);  
  27. Map<String,Object>enviMap=newHashMap<String,Object>();  
  28.  
  29. JMXConnectorconnector=JMXConnectorFactory.connect(url,enviMap);  
  30.  
  31. MBeanServerConnectionmbsc=connector.getMBeanServerConnection();  
  32. System.out.println("successfulconnected");  
  33. connector.close();  
  34. System.out.println("closeconnect");  
  35. }catch(Exceptione){  
  36. System.out.println("error");  
  37. e.printStackTrace();  
  38. }  
  39. }  
  40. }  
  41.  

【編輯推薦】

  1. JVM內(nèi)存調(diào)優(yōu)設(shè)置原理
  2. 探究JVM1.6與JVM1.5性能差距
  3. JVM監(jiān)控在本地和遠(yuǎn)程的應(yīng)用
  4. 全面認(rèn)識Eclipse中JVM內(nèi)存設(shè)置
  5. JVM啟動參數(shù)中標(biāo)準(zhǔn)參數(shù)列表速查手冊

 

責(zé)任編輯:佚名 來源: javaeye.com
相關(guān)推薦

2010-03-04 10:56:52

JVM參數(shù)

2010-09-25 12:54:24

JVM內(nèi)存

2012-03-02 14:20:46

JavaJVM

2010-09-27 11:00:27

TomcatJVM內(nèi)存

2010-09-26 14:44:31

JVM內(nèi)存監(jiān)控工具

2023-08-24 07:46:21

服務(wù)器JVM

2010-09-25 14:45:47

LinuxJVM

2010-02-22 08:58:35

JVM內(nèi)存模型垃圾收集

2021-10-15 08:51:09

Linux內(nèi)存 Kmalloc

2010-09-27 13:26:31

JVM內(nèi)存管理機(jī)制

2017-09-20 08:48:09

JVM內(nèi)存結(jié)構(gòu)

2009-07-09 18:03:25

tomcatJVM內(nèi)存

2021-07-30 07:22:51

JVM虛擬機(jī)棧 Stack

2012-01-11 10:45:57

JavaJVM

2023-11-19 23:29:22

Heap DumpJava

2021-04-16 20:40:56

JVM內(nèi)存工具

2011-03-31 09:36:35

Cacti監(jiān)控

2010-09-27 15:39:37

JVM監(jiān)控工具

2021-07-08 06:47:19

JVM監(jiān)控工具

2015-04-22 13:18:21

云智慧API監(jiān)控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號