集结 - performance问题

Infer: Windows上的hang和crash问题

How to use ADPlus.vbs to troubleshoot "hangs" and "crashes"

http://support.microsoft.com/default.aspx?scid=kb;en-us;286350


Linux / aix:

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=%2Fcom.ibm.java.doc.igaa%2F_1vg0001475cb4a-1190e2e0f74-8000_1006.html


High CPU Utilization

On Linux

A native process takes high cpu utilization.

1. decide which thread takes the high cpu. -  ps -o thcount -p pid/ ps -mLF -p pid  -> get the cpu time and pid for that thread

2. find out what's that thread doing - get the thread stack.

 gdb - pid

input -> all thread apply bt

the bt command will ouput the stack, which would tell you what's the thread doing

misc:

(gdb) info thread

(gdb) info proc

 (gdb) info proc all


ll /proc/32193/task/ -> get the thread ids for process 32193

 cat /proc/32193/maps ->get  process memory map


A java process takes high cpu utilization

1. decide which native thread is taking high cpu, by launching 'top -H -p pid' / or using 'ps -mLF -p pid'

2. convert the native thread to hex

3. Dump the java vm to produce the javacore.txt

4. Associate by the native thread, and look at what that thread is doing


on Windows

A native process takes high cpu utilization

1. Use 'Perfmon' tool to add counters of threads for this process(thread id, processor time)

2. Export the logs to .csv format

3. Analyze the generated logs. Find out which thread is taking high cpu & what's its according Thread ID(virtual ID and system overal thread id)


4. Use tool - Debug Diagnostic tool to catch a dump file.

5. Use Debug Diagnostic tool to analyze all threads' tasks they were doing. The output html file will give each stack and the according thread id

e.g.

Thread 13 - System ID 7916
Entry point  mozcrt19!endthreadex+a0
Create time  11-12-23 22:35:09
Time spent in user mode  0 Days 00:00:00.00
Time spent in kernel mode  0 Days 00:00:00.00


This thread is not fully resolved and may or may not be a problem. Further analysis of these threads may be required.

Function  Source
ntdll!KiFastSystemCallRet 
ntdll!NtWaitForSingleObject+c 
kernel32!WaitForSingleObjectEx+a8 
kernel32!WaitForSingleObject+12 
nspr4!PR_Wait+ed 
xul!mozilla::layers::ThebesLayer::GetType+23ff 
xul!gfxPattern::gfxPattern+1d96 
nspr4!PR_WaitCondVar+1cd 
mozcrt19!endthreadex+106 


Java process takes high cpu

The same methodology applies to Java process 

1. Use perfmon tool to find out which thread is taking high cpu and find out its native thread ID

2. Get a javacore.txt file to associate with the native thread ID. See the stack to detect what is it doing - root of the high cpu


Memory leak / Handle leak


on Windows(mem leak and handle leak)

1. Use Debug Diagnostic Tool to monitor the leaking process for a period

2. Use debug diagnostic tool to open and analyze the user.dmp. The output html file will give the summary about the memory / handle leaks. As well, it will tell you which module and even which function did that.


On Linux (only memory leak

, as well as illegal memory operation, error releasing mem, uninitialized memory usage -- focus on Heap, but not stack  )

1. Use valgrind tool to start the debugged process, with correct parameters.

e.g.  valgrind --trace-children=yes --tool=memcheck --log-file=/tmp/val.log --leak-check=full ./processCmd

2. Would print the exact code line if we compile the source code with -g

3. Focus on malloc/free, new/delete, new []/delete[]; focus on Heap memory.

misc : valgrind is included in some linux distro .. such as RHEL.

The link to quick reading valgrind :-- http://www.cprogramming.com/debugging/valgrind.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值