- 浏览: 626051 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (448)
- 字符串相关 (16)
- Struts2页面显示 (15)
- Hibernate错误记录 (6)
- linux命令 (2)
- java项目测试 (5)
- 个人作品 (10)
- hibernate应用 (15)
- struts1 (7)
- 数据库(除了hibernate) (42)
- J2ME/WAP (37)
- servlet/jsp (49)
- java桌面应用+java综合 (14)
- 服务器配置,报错解决 (24)
- Myeclipse配置,抛错解决 (8)
- linux (18)
- JavaScript+jquery+ajax (45)
- div css 页面设计 (16)
- 互联网综合运营 (14)
- 编程工具类 (3)
- 论文 报告 文献 (14)
- PHP (26)
- struts2 (9)
- spring (1)
- 我的IT生活 (14)
- Resin (6)
- java项目记录 (14)
- https安全 (11)
- 支付技术 (3)
最新评论
-
yihaijunyxr:
很好呀,我好久没用iteye了,今天找出两个帐号(yihaij ...
c/c++的监听tmlisten启动缓慢解决 -
yihaijun:
好像这不算是技术博客,是工作博客
c/c++的监听tmlisten启动缓慢解决 -
ml365:
后来还优化了webservice的前置框架,不用cxf,用了另 ...
c/c++的监听tmlisten启动缓慢解决 -
Jayliuying:
有点晚哈 但是也支持一下 楼主
java相关论文的参考文献【转】 -
gqsunrise:
...
我是项目经理,我的项目管理日记【20120229】
打开 %java_home%\bin 下面,看一堆的命令
windows下是一堆exe文件。
挑几个主要的来学习记录下,蛮有用的,居家旅行,调错装x,必备!~
java :忽略
javac :忽略 , 唯一需要知道 javac -g ,
并且通过实地证明,eclipse,mvn编译都是默认加了-g进行编译的。(感谢R_Fx指导,名字太长记不住。。。)
javah :忽略。jni才用得到!~
javaw:原来是启动图形界面用到的!~
jvisualvm.exe 这个点了就知道了。很给力~~~
javap :
详细讲,这玩意是分析运行前代码和了解jvm,class机制的好家伙!
jconsole : 会用就无视了
下面4个是解决很多oom或者监视运行中的JVM的必备武器。
jhat
jps
这个很简单,用一下就知道,通过这个查看java的进程id。
14950 Jps
31664 Main
jmap
1:jmap -heap [pid]
Attaching to process ID 31664, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 10.0-b23
using thread-local object allocation.
Parallel GC with 2 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1610612736 (1536.0MB)
NewSize = 335544320 (320.0MB)
MaxNewSize = 335544320 (320.0MB)
OldSize = 4194304 (4.0MB)
NewRatio = 8
SurvivorRatio = 8
PermSize = 100663296 (96.0MB)
MaxPermSize = 268435456 (256.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 187367424 (178.6875MB)
used = 149624088 (142.6926498413086MB)
free = 37743336 (35.994850158691406MB)
79.85597752574108% used
From Space:
capacity = 72679424 (69.3125MB)
used = 2218824 (2.1160354614257812MB)
free = 70460600 (67.19646453857422MB)
3.0528915584141116% used
To Space:
capacity = 69664768 (66.4375MB)
used = 0 (0.0MB)
free = 69664768 (66.4375MB)
0.0% used
PS Old Generation
capacity = 1275068416 (1216.0MB)
used = 496040208 (473.06080627441406MB)
free = 779028208 (742.9391937255859MB)
38.903026831777474% used
PS Perm Generation
capacity = 100663296 (96.0MB)
used = 95414112 (90.99398803710938MB)
free = 5249184 (5.006011962890625MB)
94.78540420532227% used
好吧,我发现我见识浅了,看到这儿我欣喜若狂。如此清楚。
2:jmap -histo [pid] 或者 jmap -histo [pid] > heapDump.log
用用有惊喜。
写道
[admin@xxxx~]$ jmap -histo 31664 > heapDump.log
[admin@xxxx~]$
[admin@xxxx~]$ vi heapDump.log
写道
num #instances #bytes class name
----------------------------------------------
1: 1417850 97522464 [C
2: 703592 61916096 com.taobao.forest.domain.dataobject.std.impl.DefaultStdCategoryPropertyValueDO
3: 790666 56248464 [Ljava.lang.Object;
4: 91101 46575560 [I
5: 1467357 35216568 java.lang.String
6: 408526 32682080 com.taobao.forest.domain.dataobject.proprepo.impl.DefaultPropertyValueDO
7: 49821 29456896 [B
8: 195943 24656024 <constMethodKlass>
9: 537905 17212960 java.io.ObjectStreamClass$WeakClassKey
10: 127367 15981640 [Ljava.util.HashMap$Entry;
11: 653443 15682632 java.util.HashMap$Entry
12: 195943 15682208 <methodKlass>
13: 317288 15229824 com.taobao.forest.domain.dataobject.proprepo.impl.DefaultValueDO
14: 412358 13195456 java.util.LinkedHashMap$Entry
15: 259224 12435280 <symbolKlass>
16: 177 11546520 [Ljava.io.ObjectInputStream$HandleTable$HandleList;
内存dump,
友情提示:内存dump就dump一次一般没太多参考意义,推荐多dump几次,然后通过分析工具进行分析观察,方为王道;
3:jmap -dump:format=b,file=formatDump [pid]
这个才是王道的分析导出。。。
各个分析工具分析这个比较给力,上面哪个是文本,这个是format后的二进制文件。
而且耗时有一会。。。
写道
[admin@xxxx~]$ jmap -dump:format=b,file=formatDump 31664
Dumping heap to /home/admin/formatDump ...
Heap dump file created
[admin@xxxx~]$
[admin@xxxx~]$
[admin@xxxx~]$ vi heapDump.log
num #instances #bytes class name
----------------------------------------------
1: 1417850 97522464 [C
2: 703592 61916096 com.taobao.forest.domain.dataobject.std.impl.DefaultStdCategoryPropertyValueDO
3: 790666 56248464 [Ljava.lang.Object;
4: 91101 46575560 [I
5: 1467357 35216568 java.lang.String
6: 408526 32682080 com.taobao.forest.domain.dataobject.proprepo.impl.DefaultPropertyValueDO
7: 49821 29456896 [B
8: 195943 24656024 <constMethodKlass>
9: 537905 17212960 java.io.ObjectStreamClass$WeakClassKey
10: 127367 15981640 [Ljava.util.HashMap$Entry;
11: 653443 15682632 java.util.HashMap$Entry
12: 195943 15682208 <methodKlass>
13: 317288 15229824 com.taobao.forest.domain.dataobject.proprepo.impl.DefaultValueDO
14: 412358 13195456 java.util.LinkedHashMap$Entry
15: 259224 12435280 <symbolKlass>
16: 177 11546520 [Ljava.io.ObjectInputStream$HandleTable$HandleList;
[admin@xxxx~]$ jmap -dump:format=b,file=formatDump 31664
Dumping heap to /home/admin/formatDump ...
Heap dump file created
[admin@xxxx~]$
jstack
用法:jstack [pid]
正如其名,visualVm里面的线程dump用的也就是这玩意了。
可以dump当前的所有线程堆栈。
"Signal Dispatcher" daemon prio=10 tid=0x08117c00 nid=0x7bb7 runnable [0x00000000..0x44070b80]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=10 tid=0x080f6800 nid=0x7bb6 in Object.wait() [0x440cf000..0x440cff20]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x54c79120> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
"Reference Handler" daemon prio=10 tid=0x080f5800 nid=0x7bb5 in Object.wait() [0x44120000..0x44120fa0]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x54c1a290> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x080f2400 nid=0x7bb4 runnable
"GC task thread#0 (ParallelGC)" prio=10 tid=0x08072800 nid=0x7bb2 runnable
"GC task thread#1 (ParallelGC)" prio=10 tid=0x08073800 nid=0x7bb3 runnable
"VM Periodic Task Thread" prio=10 tid=0x0824c800 nid=0x7bc0 waiting on condition
JNI global references: 19493
jhat
用法:jhat -J-mx1024m heap_file_name
前面dump出来的二进制文件,现在用。
放在我这里用就是:jhat -J-mx1024m formatDump
。。。这玩意太慢了。。随便dump一个都500来M,真是恐怖~~~
Dump file created Wed Dec 29 19:20:40 CST 2010
Snapshot read, resolving...
Resolving 9500142 objects...
#
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 131072000 bytes for GrET in C:\BUILD_ARE
A\jdk6_13\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
#
# Internal Error (allocation.inline.hpp:42), pid=5492, tid=8632
# Error: GrET in C:\BUILD_AREA\jdk6_13\hotspot\src\share\vm\utilities\growableA
rray.cpp
#
# Java VM: Java HotSpot(TM) Client VM (11.3-b02 mixed mode windows-x86)
# An error report file with more information is saved as:
# C:\Users\guoliang\Downloads\hs_err_pid5492.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
这个太尴尬了。。。Out of swap space?。。。。
jstatd
jstat(sun.tools.jstat)
jstat实用程序可以用于收集各种各样不同的统计数据。jstat统计数据被分类到“选项”中,这些选项在命令行中被指定作为第一参数。对于JDK 1.6来说,您可以通过采用命令-options运行jstat查看可用的选项清单。清单1中显示了部分选项:
清单1.jstat选项
1.
2.
3. -class
4. -compiler
5. -gc
6. -gccapacity
7. -gccause
8. -gcnew
9. -gcnewcapacity
10. -gcold
11. -gcoldcapacity
12. -gcpermcapacity
13. -gcutil
14. -printcompilation
实用程序的JDK记录将告诉您清单1中每个选项返回的内容,但是其中大多数用于收集垃圾的收集器或者其部件的性能信息。-class选项显示了加载及未加载的类(使其成为检测应用程序服务器或代码中ClassLoader泄露的重要实用程序,且-compiler和-printcompilation都显示了有关Hotspot JIT编译程序的信息。
默认情况下,jstat在您核对信息时显示信息。如果您希望每隔一定时间拍摄快照,请在-options指令后以毫秒为单位指定间隔时间。jstat将持续显示监控进程信息的快照。如果您希望jstat在终止前进行特定数量的快照,在间隔时间/时间值后指定该数字。
如果5756是几分钟前开始的运行SwingSet2程序的VMID,那么下列命令将告诉jstat每250毫秒为10个佚代执行一次gc快照转储,然后停止:
15. jstat -gc 5756 250 10
请注意Sun(现在的Oracle)保留了在不进行任何预先通知的情况下更改各种选项的输出甚至是选项本身的权利。这是使用不受支持实用程序的缺点。请参看Javadocs了解jstat输出中每一列的全部细节
发表评论
-
linux上配置机器的路由
2012-01-31 14:24 1074项目有这样的需要。需要在一部机器上面打通和一个外网地址的通讯。 ... -
定时任务解决tomcat日志catalina.out分割备份
2011-12-26 11:45 1775写一个sh 原文如下: cp -rf /var/tomca ... -
运行sh脚本,文件名出现问号的解决
2011-12-21 16:08 2962写了一个脚本,非常简单,就是先拷贝一个文件,然后重命名这个拷贝 ... -
linux按照tomcat本机可以访问,其他pc机访问不了【解决】
2011-11-03 16:16 2312拿到一部机器,linux,在上门配置好了jdk和tomcat, ... -
配置VisualVM连接远程服务器时出现cannot connect using service【已解决】
2011-10-25 09:15 2394原因是配置的过程中少了一步: 用hostname -i 查 ... -
执行./startup.sh出现permission denied
2011-10-24 21:19 1784在执行./startup.sh,或者./shutdown.sh ... -
Linux 文件和目录的属性
2011-09-27 17:20 701目录 1、 Linux 文件的属性概说;2、 关于inode ... -
linux chmod命令参数及用法详解--文件文件夹权限设定命令
2011-09-27 17:09 757使用权限 : 所有使用者 ... -
用cronolog分割tomcat的catalina.out日志【转】
2011-01-24 14:49 1585WIN下的tomcat5的日志是按日期来记录的.移到linux ... -
在linux配置jdk1.6.x和tomcat6.0.x总结(教程)【原创】
2010-12-20 11:33 14871 下载合适的包: Jdk:http://cds.sun ... -
不用启动服务器生效.bash_profile的方法【转】
2010-12-20 11:15 1337在 Linux 管理中,常有需要修改根目录下 .bash_ ... -
Linux的自动执行程序cron和crontab[转]
2010-12-11 22:03 909假如你有一些任务要定 ... -
shell基础教程【转】
2010-12-11 22:02 897最近要用linux的shell写一个定时执行程序的脚本,所 ... -
linux和windows的盘符“/”或“\”[原创]
2010-12-11 10:44 921有时候很烦这些,不知道是向左还是向右,其实java有一种方 ... -
linux vi 命令 超简单实用原创教程(原创)
2010-12-10 23:40 961啦,开始啦 进入 $ vi filename 就进入 ... -
SSH常用命令大全[转]
2010-12-10 23:38 1067SSH常用命令大全 rm -rf mydir ... -
LINUX与UNIX【转】
2010-12-10 18:24 722Linux和Windows的区别 和Lin ...
相关推荐
Java命令行辅助工具是一款专为Java开发者设计的小型应用程序,旨在简化Java源代码的编译和执行过程。在日常开发中,我们通常需要通过命令行界面(CLI)来操作Java程序,这包括编译`.java`源文件为`.class`字节码文件...
自己写的简易Java命令行交互界面框架,可实现交互shell所具有的基本功能(没有历史记录功能),使用properties文件作为配置文件,利用反射实现命令的解析与向各个命令处理类的分发,使用简单,可作为各类Java小工程...
Java命令行classpath(类路径)的设置是Java开发过程中的一项基础操作,对于理解和运行Java程序至关重要。类路径是指定Java虚拟机(JVM)在执行Java程序时查找类文件的位置。正确配置类路径能确保JVM能够找到并加载...
Java 命令行 用户管理系统 系统主要功能: ①添加用户: 命令是:add 用户名 年龄 性别 工资 例:add 张三 25 男 3000.00 ②更新用户: 命令是:update id:编号 name=用户名[age=年龄][gender=性别][salary=工资] 例...
这篇博客文章将探讨如何在Eclipse中配置和使用Java命令行参数,这对于理解程序的运行行为以及调试是非常有帮助的。 在Java程序中,命令行参数是通过`main`方法的`String[] args`数组传递的,它们允许我们在不修改...
Java命令行文件管理器是一款基于Java编程语言开发的实用工具,专为用户在终端环境中提供高效、便捷的文件操作体验。这款程序集成了多种文件管理功能,如创建、删除、重命名、拷贝文件,浏览目录,以及压缩与解压缩、...
Java命令行工具是Java开发中的基础部分,它们允许开发者在没有图形用户界面(GUI)的情况下执行各种任务。这篇博文可能探讨了如何利用Java的命令行工具进行程序的编译、运行和其他相关操作。在Java中,命令行工具...
在Java编程中,命令行编译是学习和工作中不可或缺的一部分,尤其是在没有集成开发环境(IDE)的情况下。本文将深入探讨如何在命令行环境下编译和运行包含包结构的Java程序。 首先,Java中的包(package)是用来组织...
### Java命令行运行参数详解 #### 一、概述 Java作为一种广泛使用的编程语言,其运行依赖于Java虚拟机(JVM)。为了优化JVM的性能,开发者可以通过命令行传递一系列参数来控制JVM的行为。本文将详细介绍Java命令行...
下面将对这些Java命令行工具进行详细的总结和说明。 一、基础工具(Basic Tools) 1. javac:Java编程语言的编译器。开发者使用它将.java源文件编译成.class字节码文件,以便能够在JVM上运行。 2. java:Java应用...
Java 命令行编译基础知识 Java 命令行编辑的基础知识是 Java 开发的基础之一。本文将从 Java 命令行编辑的基础知识入手,逐步讲解 Java 编程语言的基本结构和基础知识。 一、 Java 命令行编辑的基础知识 Java ...
使用JCmdLineProgress库,开发者可以方便地在Java命令行程序中集成进度条,提高用户体验。通过实例化库提供的类,设置参数,然后在执行任务时调用相应的更新方法,就可以实现动态的进度显示。 例如,以下是一个简单...
Java 命令行参数详解 Java 命令行参数是 Java 虚拟机在 DOS 环境下运行时的基本参数设置,掌握这些参数可以更好地利用 Java 虚拟机的功能。本文将详细介绍 Java 命令行参数的使用方法和参数设置。 一、运行 Class ...
超级简单的JAVA命令行计算器,能够实现连续计算加减乘除,输入Q退出程序,输入C清空内容。
首先,开发Java命令行应用需要对Java编程基础有深入理解,包括类、对象、数据类型、控制结构(如循环和条件语句)、异常处理等。这些是所有Java程序的基础,无论其是否运行在命令行环境。 其次,要创建命令行应用,...
《Java命令行大富翁》是一款基于Java编程语言开发的命令行游戏,旨在帮助初学者在娱乐中学习Java基础知识。这款游戏虽然没有华丽的图形界面,但通过简单的字符输出和用户输入,模拟了经典的大富翁游戏规则,为玩家...
### Java命令行编译详解 在深入探讨Java命令行编译的具体细节之前,我们先简要回顾一下Java的编译过程。Java是一种广泛使用的高级编程语言,它支持跨平台运行,这得益于Java虚拟机(JVM)的存在。当开发者编写完...
用java写的命令行下的五子棋代码和一个清屏的动态链接库,在五子棋代码里通过jni调用来实现清屏。 五子棋算法是参考的这个博客http://blog.163.com/liuliang_nice/blog/static/10274620200741201527290/ 文章提到的...
JCmdLineProgress库就是为了实现这个目的,它允许开发者在Java命令行界面中轻松创建动态的进度条。 JCmdLineProgress库的核心功能在于提供了一个简洁的API,让开发者可以轻松地集成到他们的程序中。这个库通常包括...
JAVA源码Java命令行解析器JOptSimple