CPU使用率

工具: vmstat

检查应用性能时,应该首先审查CPU时间。

代码优化的目的是提升而不是降低(更短时间段内的)CPU的使用率。

在试图深入优化应用前,应该先弄清楚为何CPU使用率低。

磁盘使用率

工具: iostat

对于所有应用来说,监控磁盘使用率非常重要。即便不直接写磁盘的应用,系统交换仍会影响它们的性能。

写入磁盘的应用遇到瓶颈,是因为写入数据的效率不高(吞吐率太低),或者是因为写入太多数据(吞吐率太高)。

网络使用率

工具: netstat nicstat

对于基于网络的应用来说,务必要监控网络以确保它不是瓶颈。

往网络写数据的应用遇到瓶颈,可能是因为写数据的效率太低(吞吐率太低),或者是因为写入了太多数据(吞吐率太高)。

Java监控工具

jcmd: 打印java进程涉及的基本类,线程和VM信息。

jconsole: 提供JVM活动的图形化视图,包括线程的使用,类的使用和GC活动。

jhat: 读取内存堆转储,并有助于分析。

jmap: 提供堆转储和其他JVM内存使用的信息。

jinfo: 查看JVM的系统属性,可以动态设置的一些系统属性。

jstack: 转储Java进程的栈信息。

jstat: 提供GC和类装载活动的信息。

jvisualvm: 监视JVM的GUI工具,可以用来剖析运行的应用,分析JVM堆转储。

Can’t attach to the process

jinfo -sysprops ${process_id}

Attaching to process ID 18401, please wait...

Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process

sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process

at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163)

at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:278)

at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:671)

at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611)

at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337)

at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)

at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)

at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)

at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)

at sun.jvm.hotspot.tools.JInfo.main(JInfo.java:138)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at sun.tools.jinfo.JInfo.runTool(JInfo.java:108)

at sun.tools.jinfo.JInfo.main(JInfo.java:76)

Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process

at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method)

at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access$100(LinuxDebuggerLocal.java:62)

at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$1AttachTask.doit(LinuxDebuggerLocal.java:269)

at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:138)


临时解决方法:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

1

该方法在下次重启前有效。

永久有效方法:

sudo vi /etc/sysctl.d/10-ptrace.conf

1

将下面这行:

kernel.yama.ptrace_scope = 1

修改为:

kernel.yama.ptrace_scope = 0

重启系统,使修改生效。

参考链接: SA, jinfo, jmap, jstack don’t work on Ubuntu

---------------------

作者:xiaojia1100

版权声明:本文为博主原创文章,转载请附上博文链接!