2019独角兽企业重金招聘Python工程师标准>>>

本文继续介绍Java自带的性能监测工具,本文使用jstack (Java Stack Trace)工具来玩~

使用jstack命令工具可以得到线程堆栈信息,根据这些线程堆栈信息,我们可以去检查Java程序出现的问题,如检测死锁,并输出死锁的信息~的排查。

在使用jstack命令之前,可以先使用jstack -h来查看jstack命令相关的使用方法,包括有哪些参数等~

[root@dev18 ~]# jstack -h
Usage:jstack [-l] <pid>(to connect to running process)jstack -F [-m] [-l] <pid>(to connect to a hung process)jstack [-m] [-l] <executable> <core>(to connect to a core file)jstack [-m] [-l] [server_id@]<remote server IP or hostname>(to connect to a remote debug server)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-h or -help to print this help message

jstack基本语法

  jstack [option] <pid>

使用jstack -m <pid>打印java和native frames 的信息,如jstack -m 12905,这里的12905是Zookeeper服务的进程ID~

[root@dev18 ~]# jstack -m 12905
Attaching to process ID 12905, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01
Deadlock Detection:No deadlocks found.----------------- 12908 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad07875a5  Unsafe_Park + 0x125
0x00007fcacc4b17f8  * sun.misc.Unsafe.park(boolean, long) bci:0 (Interpreted frame)
0x00007fcacc4a5058  * java.util.concurrent.locks.LockSupport.park(java.lang.Object) bci:14 line:186 (Interpreted frame)
0x00007fcacc4a5058  * java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt() bci:1 line:834 (Interpreted frame)
0x00007fcacc4a5350  * java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(int) bci:72 line:994 (Interpreted frame)
0x00007fcacc4a5058  * java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(int) bci:24 line:1303 (Interpreted frame)
0x00007fcacc4a5058  * java.util.concurrent.CountDownLatch.await() bci:5 line:236 (Interpreted frame)
0x00007fcacc4a5058  * org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(org.apache.zookeeper.server.ServerConfig) bci:134 line:122 (Interpreted frame)
0x00007fcacc4a5058  * org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(java.lang.String[]) bci:49 line:87 (Interpreted frame)
0x00007fcacc4a5058  * org.apache.zookeeper.server.ZooKeeperServerMain.main(java.lang.String[]) bci:10 line:53 (Interpreted frame)
0x00007fcacc4a5058  * org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(java.lang.String[]) bci:84 line:116 (Interpreted frame)
0x00007fcacc4a5058  * org.apache.zookeeper.server.quorum.QuorumPeerMain.main(java.lang.String[]) bci:10 line:78 (Interpreted frame)
0x00007fcacc49f4e7  <StubRoutines>
0x00007fcad040a085  _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365
0x00007fcad0408ae8  _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28
0x00007fcad0442a99  _ZL17jni_invoke_staticP7JNIEnv_P9JavaValueP8_jobject11JNICallTypeP10_jmethodIDP18JNI_ArgumentPusherP6Thread + 0x219
0x00007fcad044b6b2  jni_CallStaticVoidMethod + 0x162
0x00007fcad0c866d9  JavaMain + 0x7e9
----------------- 12909 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad05eb5cf  _ZN7Monitor5IWaitEP6Threadl + 0xef
0x00007fcad05ebd5e  _ZN7Monitor4waitEblb + 0x22e
0x00007fcad035fcc3  _ZN13GCTaskManager8get_taskEj + 0x43
0x00007fcad0361388  _ZN12GCTaskThread3runEv + 0x188
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12910 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad05eb5cf  _ZN7Monitor5IWaitEP6Threadl + 0xef
0x00007fcad05ebd5e  _ZN7Monitor4waitEblb + 0x22e
0x00007fcad035fcc3  _ZN13GCTaskManager8get_taskEj + 0x43
0x00007fcad0361388  _ZN12GCTaskThread3runEv + 0x188
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12911 -----------------
0x000000358d40ba0e  __pthread_cond_timedwait + 0x13e
0x00007fcad05eb87e  _ZN7Monitor5IWaitEP6Threadl + 0x39e
0x00007fcad05ebd5e  _ZN7Monitor4waitEblb + 0x22e
0x00007fcad07b1ff9  _ZN8VMThread4loopEv + 0x339
0x00007fcad07b2300  _ZN8VMThread3runEv + 0x70
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12912 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad061860d  _ZN13ObjectMonitor4waitElbP6Thread + 0x9bd
0x00007fcad0487578  JVM_MonitorWait + 0x168
0x00007fcacc52dec8  <Unknown compiled code>
0x00007fcacc4a5058  * java.lang.Object.wait() bci:2 line:503 (Interpreted frame)
0x00007fcacc4a5058  * java.lang.ref.Reference$ReferenceHandler.run() bci:46 line:133 (Interpreted frame)
0x00007fcacc49f4e7  <StubRoutines>
0x00007fcad040a085  _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365
0x00007fcad0408ae8  _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28
0x00007fcad0408db7  _ZN9JavaCalls12call_virtualEP9JavaValue11KlassHandleP6SymbolS4_P17JavaCallArgumentsP6Thread + 0x197
0x00007fcad0408ed7  _ZN9JavaCalls12call_virtualEP9JavaValue6Handle11KlassHandleP6SymbolS5_P6Thread + 0x47
0x00007fcad0485ef5  _ZL12thread_entryP10JavaThreadP6Thread + 0xe5
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12913 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad061860d  _ZN13ObjectMonitor4waitElbP6Thread + 0x9bd
0x00007fcad0487578  JVM_MonitorWait + 0x168
0x00007fcacc52dec8  <Unknown compiled code>
0x00007fcacc4a5058  * java.lang.ref.ReferenceQueue.remove(long) bci:44 line:135 (Interpreted frame)
0x00007fcacc4a5233  * java.lang.ref.ReferenceQueue.remove() bci:2 line:151 (Interpreted frame)
0x00007fcacc4a5233  * java.lang.ref.Finalizer$FinalizerThread.run() bci:36 line:209 (Interpreted frame)
0x00007fcacc49f4e7  <StubRoutines>
0x00007fcad040a085  _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365
0x00007fcad0408ae8  _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28
0x00007fcad0408db7  _ZN9JavaCalls12call_virtualEP9JavaValue11KlassHandleP6SymbolS4_P17JavaCallArgumentsP6Thread + 0x197
0x00007fcad0408ed7  _ZN9JavaCalls12call_virtualEP9JavaValue6Handle11KlassHandleP6SymbolS5_P6Thread + 0x47
0x00007fcad0485ef5  _ZL12thread_entryP10JavaThreadP6Thread + 0xe5
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12914 -----------------
0x000000358d40d9b0  sem_wait + 0x30
0x00007fcad0622365  _ZL19signal_thread_entryP10JavaThreadP6Thread + 0x95
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12915 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad05eb5cf  _ZN7Monitor5IWaitEP6Threadl + 0xef
0x00007fcad05ebdd6  _ZN7Monitor4waitEblb + 0x2a6
0x00007fcad0254d88  _ZN12CompileQueue3getEv + 0x128
0x00007fcad0258e8a  _ZN13CompileBroker20compiler_thread_loopEv + 0x13a
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12916 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad05eb5cf  _ZN7Monitor5IWaitEP6Threadl + 0xef
0x00007fcad05ebdd6  _ZN7Monitor4waitEblb + 0x2a6
0x00007fcad0254d88  _ZN12CompileQueue3getEv + 0x128
0x00007fcad0258e8a  _ZN13CompileBroker20compiler_thread_loopEv + 0x13a
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12917 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad05eb5cf  _ZN7Monitor5IWaitEP6Threadl + 0xef
0x00007fcad05ebd5e  _ZN7Monitor4waitEblb + 0x22e
0x00007fcad06b9f27  _ZN13ServiceThread20service_thread_entryEP10JavaThreadP6Thread + 0x197
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12918 -----------------
0x000000358d0df143  __libc_poll + 0x53
0x00007fcac4827037  Java_java_net_PlainSocketImpl_socketAccept + 0x1e7
0x00007fcacc4b17f8  * java.net.PlainSocketImpl.socketAccept(java.net.SocketImpl) bci:0 (Interpreted frame)
0x00007fcacc4a5058  * java.net.AbstractPlainSocketImpl.accept(java.net.SocketImpl) bci:7 line:398 (Interpreted frame)
0x00007fcacc4a5058  * java.net.ServerSocket.implAccept(java.net.Socket) bci:60 line:530 (Interpreted frame)
0x00007fcacc4a5058  * java.net.ServerSocket.accept() bci:48 line:498 (Interpreted frame)
0x00007fcacc4a5233  * sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop() bci:55 line:388 (Interpreted frame)
0x00007fcacc4a5058  * sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run() bci:1 line:360 (Interpreted frame)
0x00007fcacc4a5706  * java.lang.Thread.run() bci:11 line:745 (Interpreted frame)
0x00007fcacc49f4e7  <StubRoutines>
0x00007fcad040a085  _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365
0x00007fcad0408ae8  _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28
0x00007fcad0408db7  _ZN9JavaCalls12call_virtualEP9JavaValue11KlassHandleP6SymbolS4_P17JavaCallArgumentsP6Thread + 0x197
0x00007fcad0408ed7  _ZN9JavaCalls12call_virtualEP9JavaValue6Handle11KlassHandleP6SymbolS5_P6Thread + 0x47
0x00007fcad0485ef5  _ZL12thread_entryP10JavaThreadP6Thread + 0xe5
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12919 -----------------
0x000000358d40ba0e  __pthread_cond_timedwait + 0x13e
0x00007fcad05eb87e  _ZN7Monitor5IWaitEP6Threadl + 0x39e
0x00007fcad05ebd5e  _ZN7Monitor4waitEblb + 0x22e
0x00007fcad075f951  _ZNK13WatcherThread5sleepEv + 0x71
0x00007fcad075fe6e  _ZN13WatcherThread3runEv + 0x5e
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12920 -----------------
0x000000358d0e8f63  __GI_epoll_wait + 0x33
0x00007fcacc5233d2  <Unknown compiled code>
----------------- 12921 -----------------
0x000000358d40ba0e  __pthread_cond_timedwait + 0x13e
0x00007fcad0617eab  _ZN13ObjectMonitor4waitElbP6Thread + 0x25b
0x00007fcad0487578  JVM_MonitorWait + 0x168
0x00007fcacc52dec8  <Unknown compiled code>
----------------- 12922 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad07875a5  Unsafe_Park + 0x125
0x00007fcacc545e4a  <Unknown compiled code>
----------------- 12923 -----------------
0x000000358d40b63c  __pthread_cond_wait + 0xcc
0x00007fcad07875a5  Unsafe_Park + 0x125
0x00007fcacc545e4a  <Unknown compiled code>
----------------- 17907 -----------------
0x000000358d40eadd  __libc_accept + 0x2d
0x00007fcad010972b  _ZN14AttachListener7dequeueEv + 0x7b
0x00007fcad010827a  _ZL28attach_listener_thread_entryP10JavaThreadP6Thread + 0x19a
0x00007fcad076392f  _ZN10JavaThread17thread_main_innerEv + 0xdf
0x00007fcad0763a35  _ZN10JavaThread3runEv + 0xf5
0x00007fcad062a4b8  _ZL10java_startP6Thread + 0x108
----------------- 12905 -----------------
0x000000358d4082ad  pthread_join + 0x10d
[root@dev18 ~]#

接下来,我们就来看一下jstack查看死锁的示例~

使用jstack查看死锁

死锁Java代码

public class Deadlock {static class Friend {private final String name;public Friend(String name) {this.name = name;}public String getName() {return this.name;}public synchronized void bow(Friend bower) {System.out.format("%s: %s"+ "  has bowed to me!%n", this.name, bower.getName());bower.bowBack(this);}public synchronized void bowBack(Friend bower) {System.out.format("%s: %s"+ " has bowed back to me!%n",this.name, bower.getName());}}public static void main(String[] args) {final Friend alphonse =new Friend("Alphonse");final Friend gaston =new Friend("Gaston");new Thread(new Runnable() {public void run() { alphonse.bow(gaston); }}).start();new Thread(new Runnable() {public void run() { gaston.bow(alphonse); }}).start();}
}

查看死锁进程

在Eclipse上运行上述Deadlock程序,然后使用jps -l查看死锁进程ID~

C:\Users\wangmengjun>jps -l
5752 sun.tools.jps.Jps
16724 F:\JavaDeveloper\eclipse\\plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
11172 Deadlock
17868

使用jstack检测死锁原因

使用jps -l查看死锁进程ID,我们得知死锁程序的PID为11172~

接下来,我们就使用jstack -l 11172检测死锁原因~

C:\Users\wangmengjun>jstack -l 11172
2017-03-22 19:06:29
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):"DestroyJavaVM" prio=6 tid=0x0000000002a72800 nid=0x3d8c waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Thread-1" prio=6 tid=0x0000000011373000 nid=0x46c4 waiting for monitor entry [0x00000000118df000]java.lang.Thread.State: BLOCKED (on object monitor)at Deadlock$Friend.bowBack(Deadlock.java:19)- waiting to lock <0x00000007ab134018> (a Deadlock$Friend)at Deadlock$Friend.bow(Deadlock.java:16)- locked <0x00000007ab134060> (a Deadlock$Friend)at Deadlock$2.run(Deadlock.java:34)at java.lang.Thread.run(Unknown Source)Locked ownable synchronizers:- None"Thread-0" prio=6 tid=0x000000000f9c7800 nid=0x2f94 waiting for monitor entry [0x00000000117df000]java.lang.Thread.State: BLOCKED (on object monitor)at Deadlock$Friend.bowBack(Deadlock.java:19)- waiting to lock <0x00000007ab134060> (a Deadlock$Friend)at Deadlock$Friend.bow(Deadlock.java:16)- locked <0x00000007ab134018> (a Deadlock$Friend)at Deadlock$1.run(Deadlock.java:31)at java.lang.Thread.run(Unknown Source)Locked ownable synchronizers:- None"Service Thread" daemon prio=6 tid=0x000000000f987000 nid=0x3480 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"C2 CompilerThread1" daemon prio=10 tid=0x000000000f978000 nid=0x4468 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"C2 CompilerThread0" daemon prio=10 tid=0x000000000f972800 nid=0x4558 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Attach Listener" daemon prio=10 tid=0x000000000f971800 nid=0x4ba4 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Signal Dispatcher" daemon prio=10 tid=0x000000000f96e800 nid=0x4860 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Finalizer" daemon prio=8 tid=0x000000000f921000 nid=0x4964 in Object.wait() [0x0000000010cdf000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000007ab084858> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(Unknown Source)- locked <0x00000007ab084858> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(Unknown Source)at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)Locked ownable synchronizers:- None"Reference Handler" daemon prio=10 tid=0x000000000f917800 nid=0x30bc in Object.wait() [0x0000000010bdf000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000007ab084470> (a java.lang.ref.Reference$Lock)at java.lang.Object.wait(Object.java:503)at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)- locked <0x00000007ab084470> (a java.lang.ref.Reference$Lock)Locked ownable synchronizers:- None"VM Thread" prio=10 tid=0x000000000f912000 nid=0x3330 runnable"GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000002a88800 nid=0x4870 runnable"GC task thread#1 (ParallelGC)" prio=6 tid=0x0000000002a8a000 nid=0x4324 runnable"GC task thread#2 (ParallelGC)" prio=6 tid=0x0000000002a8c000 nid=0x41d4 runnable"GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000002a8d800 nid=0x26d4 runnable"VM Periodic Task Thread" prio=10 tid=0x000000000f991000 nid=0x17a4 waiting on conditionJNI global references: 122Found one Java-level deadlock:
=============================
"Thread-1":waiting to lock monitor 0x000000000f91efa8 (object 0x00000007ab134018, a Deadlock$Friend),which is held by "Thread-0"
"Thread-0":waiting to lock monitor 0x000000000f920398 (object 0x00000007ab134060, a Deadlock$Friend),which is held by "Thread-1"Java stack information for the threads listed above:
===================================================
"Thread-1":at Deadlock$Friend.bowBack(Deadlock.java:19)- waiting to lock <0x00000007ab134018> (a Deadlock$Friend)at Deadlock$Friend.bow(Deadlock.java:16)- locked <0x00000007ab134060> (a Deadlock$Friend)at Deadlock$2.run(Deadlock.java:34)at java.lang.Thread.run(Unknown Source)
"Thread-0":at Deadlock$Friend.bowBack(Deadlock.java:19)- waiting to lock <0x00000007ab134060> (a Deadlock$Friend)at Deadlock$Friend.bow(Deadlock.java:16)- locked <0x00000007ab134018> (a Deadlock$Friend)at Deadlock$1.run(Deadlock.java:31)at java.lang.Thread.run(Unknown Source)Found 1 deadlock.

从上述输出的信息中可以看出死锁的信息~

转载于:https://my.oschina.net/wangmengjun/blog/865125

Java自带的性能监测工具之jstack相关推荐

  1. Java自带的性能监测工具之jinfo

    2019独角兽企业重金招聘Python工程师标准>>> 本文使用jinfo命令工具~ jinfo用于查看运行中的java程序的参数,同时也支持在运行时修改部分参数~ 参数包括Java ...

  2. java性能检测工具_Java自带的性能监测工具之jmap

    本文继续介绍Java自带的性能监测工具,本文使用jmap工具来玩~ jmap (Java Memory Map) 命令可以生成Java应用程序的堆快照和对象统计信息,对生成的堆快照进行分析,可以分析堆 ...

  3. java gc检测工具_Java自带的性能监测工具之jstat

    本文使用jstat命令工具~ jstat简介 jstat (Java Virtual Machine Statistics Monitoring Tool) 是一个可以用于观察Java应用程序运行时信 ...

  4. Linux 性能监测工具总结

    前言: Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存.CPU.硬盘--)出了问题.在Linux系统中,所有的运行参数保存在虚拟目录/ ...

  5. Linux 性能监测工具

    Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存.CPU.硬盘--)出了问题.在Linux系统中,所有的运行参数保存在虚拟目录/proc ...

  6. Linux性能监测工具Nmon介绍及其使用

    1 NMON介绍 Nmon由 IBM 开发并已开源 (Nmon for linux 版本已经在 2009 年 7 月 27 日开放源码 ) ,是收集 AIX 或 Linux 主机的性能数据并分析的工具 ...

  7. 十三个强大的Linux性能监测工具

    Linux系统下,大多数的性能监测工具保存在/proc目录下.这里我们将Linux AS 和 SUSE LINUX EnterpriseServer中的命令行及图形方式下的性能监测工具做概括性介绍.这 ...

  8. 【Netdata】性能监测工具介绍、安装、使用

    一.工具介绍 Netdata是一款Linux系统实时性能监测工具,以web的可视化方式展示系统及应用程序的实时运行状态.前端响应快,UI很整洁,操作方面,支持图表重置,缩放.具体优点如下:界面酷炫:i ...

  9. android studio 测试工具,Android:Studio性能监测工具

    Android Studio 内置了四种性能监测工具Memory Monitor.Network Monitor.CPU Monitor.GPU Monitor,我们可以使用这些工具监测APP的状态, ...

最新文章

  1. 工程师进阶之路(二)
  2. 通过案例学调优之--Oracle Cluster Table
  3. 使用Apollo通过WebSocket通过STOMP轻松进行消息传递
  4. 关于某些系统统计查询等业务进行大数据量的测试
  5. 【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
  6. 小知识 | 谈谈 损失函数, 成本函数, 目标函数 的区别
  7. CSS入门学习笔记+案例
  8. Python 自动化教程(3) : 自动生成PPT文件 Part 1 (干货)
  9. HCNP数通认证考试心得体会
  10. c语言银行卡六位密码编译,用c语言生成六位的随机密码。
  11. VISTA 服务详解
  12. QQ微信可以上网,但是浏览器上不了网怎么办?
  13. meteor使用简介
  14. NIVIDIA Tegra K1 QWT安装使用问题和解决办法
  15. Leco题目:整数反转
  16. 标点符号的英语名称翻译
  17. visio如何找到画线工具
  18. Executor框架-Executors
  19. SqlCommand.ExecuteNonQuery()方法的使用注意
  20. git push 提示当前分支没有对应的远程分支?

热门文章

  1. 论文阅读:Softer-NMS: Rethinking Bounding Box Regression for Accurate Object Detection
  2. 文献管理工具——Zotero教程
  3. 重磅推荐,国内国外优秀的素材资源网站
  4. win10笔记本外接屏幕不清晰的解决方法
  5. iClap的名字是怎么来的,clap是有什么特殊的意义么?
  6. 微信开发者工具 复制粘贴一行 快捷键
  7. 云堡垒机相关概念汇总说明
  8. 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?
  9. MM计划协议-阿龙学习MM PA 笔记
  10. 微信公众号+获取文章内容【只是记录自己的学习过程】