【发布时间】:2015-11-21 00:46:34
【问题描述】:
我尝试使用jmap/eclipse/jvisualvm等来诊断问题,但没有太大进展。您的任何建议都会被采纳!
我们有一个长期运行的 java 应用程序存在内存泄漏问题。我们使用以下设置来启动程序。我们使用 java 1.7.0_67。
java -server -Xmx500M -Xms500M -XX:NewSize=300M \
-verbosegc -Xloggc:/var/log/singer/gc.log -XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=100 -XX:GCLogFileSize=2M -XX:+PrintGCDetails \
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintClassHistogram \
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
运行几天后,“top -p”会显示如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29503 root 35 15 8240m 1.2g 14m S 36 2.0 215:31.18 java
'top' 命令显示我们程序的常驻内存使用量为 1.2G。这远远超过了我们设置的 500M 最大堆大小。
以下显示了一些 jvm 指标。计数在 1.2G 附近。该程序在启动时没有使用这么多内存。
jvm_gc_ConcurrentMarkSweep_cycles: 5
jvm_gc_ConcurrentMarkSweep_msec: 110
jvm_gc_ParNew_cycles: 26129
jvm_gc_ParNew_msec: 130964
jvm_gc_cycles: 26134
jvm_gc_msec: 131074
jvm_buffer_direct_count: 27
jvm_buffer_direct_max: 463077
jvm_buffer_direct_used: 463077
jvm_buffer_mapped_count: 0
jvm_buffer_mapped_max: 0
jvm_buffer_mapped_used: 0
jvm_classes_current_loaded: 2821
jvm_classes_total_loaded: 2821
jvm_classes_total_unloaded: 0
jvm_compilation_time_msec: 12976
jvm_current_mem_CMS_Old_Gen_max: 209715200
jvm_current_mem_CMS_Old_Gen_used: 82458736
jvm_current_mem_CMS_Perm_Gen_max: 85983232
jvm_current_mem_CMS_Perm_Gen_used: 20445832
jvm_current_mem_Code_Cache_max: 50331648
jvm_current_mem_Code_Cache_used: 4465792
jvm_current_mem_Par_Eden_Space_max: 251658240
jvm_current_mem_Par_Eden_Space_used: 131968344
jvm_current_mem_Par_Survivor_Space_max: 31457280
jvm_current_mem_Par_Survivor_Space_used: 2681328
jvm_current_mem_used: 242020032
jvm_fd_count: 493
jvm_fd_limit: 65536
jvm_heap_committed: 492830720
jvm_heap_max: 492830720
jvm_heap_used: 217095032
jvm_nonheap_committed: 38780928
jvm_nonheap_max: 136314880
jvm_nonheap_used: 24911624
jvm_num_cpus: 32
jvm_post_gc_CMS_Old_Gen_max: 209715200
jvm_post_gc_CMS_Old_Gen_used: 13095808
jvm_post_gc_CMS_Perm_Gen_max: 85983232
jvm_post_gc_CMS_Perm_Gen_used: 20444448
jvm_post_gc_Par_Eden_Space_max: 251658240
jvm_post_gc_Par_Eden_Space_used: 0
jvm_post_gc_Par_Survivor_Space_max: 31457280
jvm_post_gc_Par_Survivor_Space_used: 2681328
jvm_post_gc_used: 36221584
jvm_start_time: 1440568584192
jvm_thread_count: 65
jvm_thread_daemon_count: 25
jvm_thread_peak_count: 79
jvm_uptime: 50765537
进程状态:
Name: java
State: S (sleeping)
Tgid: 29503
Ngid: 0
Pid: 29503
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 1024
Groups: 0
VmPeak: 8440764 kB
VmSize: 8439440 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 1232168 kB
VmRSS: 1232168 kB
VmData: 8386608 kB
VmStk: 136 kB
VmExe: 4 kB
VmLib: 15320 kB
VmPTE: 3296 kB
VmSwap: 0 kB
Threads: 104
SigQ: 0/241457
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000002
SigCgt: 2000000181005ccd
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
Seccomp: 0
Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list: 0-127
Mems_allowed: 00000000,00000003
Mems_allowed_list: 0-1
voluntary_ctxt_switches: 52
nonvoluntary_ctxt_switches: 2
【问题讨论】:
标签: java performance memory memory-leaks profiling