`

java命令行【转】

阅读更多

打开 %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。

 

 

服务器输出 写道
[admin@v014108 ~]$ jps
14950 Jps
31664 Main

 

jmap

1:jmap -heap [pid]

 

 

 写道
[admin@xxx ~]$ jmap -heap 31664
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~]$
 

 


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,真是恐怖~~~

 

 

 写道
Reading from formatDump...
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输出中每一列的全部细节

分享到:
评论

相关推荐

    java命令行辅助工具

    Java命令行辅助工具是一款专为Java开发者设计的小型应用程序,旨在简化Java源代码的编译和执行过程。在日常开发中,我们通常需要通过命令行界面(CLI)来操作Java程序,这包括编译`.java`源文件为`.class`字节码文件...

    简易Java命令行交互界面框架

    自己写的简易Java命令行交互界面框架,可实现交互shell所具有的基本功能(没有历史记录功能),使用properties文件作为配置文件,利用反射实现命令的解析与向各个命令处理类的分发,使用简单,可作为各类Java小工程...

    Java命令行classpath的设置

    Java命令行classpath(类路径)的设置是Java开发过程中的一项基础操作,对于理解和运行Java程序至关重要。类路径是指定Java虚拟机(JVM)在执行Java程序时查找类文件的位置。正确配置类路径能确保JVM能够找到并加载...

    Java 命令行 用户管理系统

    Java 命令行 用户管理系统 系统主要功能: ①添加用户: 命令是:add 用户名 年龄 性别 工资 例:add 张三 25 男 3000.00 ②更新用户: 命令是:update id:编号 name=用户名[age=年龄][gender=性别][salary=工资] 例...

    eclipse java 命令行参数

    这篇博客文章将探讨如何在Eclipse中配置和使用Java命令行参数,这对于理解程序的运行行为以及调试是非常有帮助的。 在Java程序中,命令行参数是通过`main`方法的`String[] args`数组传递的,它们允许我们在不修改...

    java命令行文件管理器

    Java命令行文件管理器是一款基于Java编程语言开发的实用工具,专为用户在终端环境中提供高效、便捷的文件操作体验。这款程序集成了多种文件管理功能,如创建、删除、重命名、拷贝文件,浏览目录,以及压缩与解压缩、...

    Java 命令行工具

    Java命令行工具是Java开发中的基础部分,它们允许开发者在没有图形用户界面(GUI)的情况下执行各种任务。这篇博文可能探讨了如何利用Java的命令行工具进行程序的编译、运行和其他相关操作。在Java中,命令行工具...

    java命令行编译全

    在Java编程中,命令行编译是学习和工作中不可或缺的一部分,尤其是在没有集成开发环境(IDE)的情况下。本文将深入探讨如何在命令行环境下编译和运行包含包结构的Java程序。 首先,Java中的包(package)是用来组织...

    Java命令行运行参数说明大全.txt

    ### Java命令行运行参数详解 #### 一、概述 Java作为一种广泛使用的编程语言,其运行依赖于Java虚拟机(JVM)。为了优化JVM的性能,开发者可以通过命令行传递一系列参数来控制JVM的行为。本文将详细介绍Java命令行...

    Java 命令行以及Java工具总结

    下面将对这些Java命令行工具进行详细的总结和说明。 一、基础工具(Basic Tools) 1. javac:Java编程语言的编译器。开发者使用它将.java源文件编译成.class字节码文件,以便能够在JVM上运行。 2. java:Java应用...

    java命令行编译基础知识

    Java 命令行编译基础知识 Java 命令行编辑的基础知识是 Java 开发的基础之一。本文将从 Java 命令行编辑的基础知识入手,逐步讲解 Java 编程语言的基本结构和基础知识。 一、 Java 命令行编辑的基础知识 Java ...

    Java的命令行进度条 JCmdLineProgess

    使用JCmdLineProgress库,开发者可以方便地在Java命令行程序中集成进度条,提高用户体验。通过实例化库提供的类,设置参数,然后在执行任务时调用相应的更新方法,就可以实现动态的进度显示。 例如,以下是一个简单...

    java的几个命令行参数

    Java 命令行参数详解 Java 命令行参数是 Java 虚拟机在 DOS 环境下运行时的基本参数设置,掌握这些参数可以更好地利用 Java 虚拟机的功能。本文将详细介绍 Java 命令行参数的使用方法和参数设置。 一、运行 Class ...

    JAVA命令行计算器连续计算加减乘除

    超级简单的JAVA命令行计算器,能够实现连续计算加减乘除,输入Q退出程序,输入C清空内容。

    Java 命令行应用开发

    首先,开发Java命令行应用需要对Java编程基础有深入理解,包括类、对象、数据类型、控制结构(如循环和条件语句)、异常处理等。这些是所有Java程序的基础,无论其是否运行在命令行环境。 其次,要创建命令行应用,...

    java命令行大富翁

    《Java命令行大富翁》是一款基于Java编程语言开发的命令行游戏,旨在帮助初学者在娱乐中学习Java基础知识。这款游戏虽然没有华丽的图形界面,但通过简单的字符输出和用户输入,模拟了经典的大富翁游戏规则,为玩家...

    java命令行编译说明

    ### Java命令行编译详解 在深入探讨Java命令行编译的具体细节之前,我们先简要回顾一下Java的编译过程。Java是一种广泛使用的高级编程语言,它支持跨平台运行,这得益于Java虚拟机(JVM)的存在。当开发者编写完...

    Java编写的五子棋(命令行下的)

    用java写的命令行下的五子棋代码和一个清屏的动态链接库,在五子棋代码里通过jni调用来实现清屏。 五子棋算法是参考的这个博客http://blog.163.com/liuliang_nice/blog/static/10274620200741201527290/ 文章提到的...

    Java的命令行进度条 JCmdLineProgess.7z

    JCmdLineProgress库就是为了实现这个目的,它允许开发者在Java命令行界面中轻松创建动态的进度条。 JCmdLineProgress库的核心功能在于提供了一个简洁的API,让开发者可以轻松地集成到他们的程序中。这个库通常包括...

    JAVA源码Java命令行解析器JOptSimple

    JAVA源码Java命令行解析器JOptSimple

Global site tag (gtag.js) - Google Analytics