java用完了内存问题

我有一个运行在带有linux 64bit操作系统的amazon-ec2-m1.large实例上的jar文件。 我在不同时间之后耗尽内存,通常在2-4之间,尽管在我的上一次日志写入(在创建错误文件之前),我看到以下内容:

Memory - totalHeapSize: 264 MB, maxHeapSize: 1656 MB, freeHeapSize: 220 MB 

当我从jar开始看到内存耗尽 – 所有值都相同,freeHeapSize介于200-230 MB之间(我每隔30秒检查一次,并执行System.gc())

在hs_err_pid2250.log中写道:

  # # There is insufficient memory for the Java Runtime Environment to continue. # Cannot create GC thread. Out of system resources. # Possible reasons: # The system is out of physical RAM or swap space # In 32 bit mode, the process size limit was hit # Possible solutions: # Reduce memory load on the system # Increase physical memory or swap space # Check if swap backing store is full # Use 64 bit Java on a 64 bit OS # Decrease Java heap size (-Xmx/-Xms) # Decrease number of Java threads # Decrease Java thread stack sizes (-Xss) # Set larger code cache with -XX:ReservedCodeCacheSize= # This output file may be truncated or incomplete. # # Out of Memory Error (gcTaskThread.cpp:46), pid=2250, tid=140227064182528 # # JRE version: 7.0_25-b15 # Java VM: Java HotSpot(TM) 64-Bit Server VM (23.25-b01 mixed mode linux-amd64 compressed oops) # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # --------------- THREAD --------------- Current thread (0x00007f8920007800): JavaThread "Unknown thread" [_thread_in_vm, id=2251, stack(0x00007f8928493000,0x00007f8928594000)] Stack: [0x00007f8928493000,0x00007f8928594000], sp=0x00007f89285925d0, free space=1021k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [libjvm.so+0x8a1d3a] VMError::report_and_die()+0x2ea V [libjvm.so+0x4071fb] report_vm_out_of_memory(char const*, int, unsigned long, char const*)+0x9b V [libjvm.so+0x4b3e2a] GCTaskThread::GCTaskThread(GCTaskManager*, unsigned int, unsigned int)+0xfa V [libjvm.so+0x4b2896] GCTaskManager::initialize()+0x266 V [libjvm.so+0x75dc4f] ParallelScavengeHeap::initialize()+0x6cf V [libjvm.so+0x87a078] Universe::initialize_heap()+0xb8 V [libjvm.so+0x87c7ed] universe_init()+0x7d V [libjvm.so+0x500315] init_globals()+0x65 V [libjvm.so+0x863a62] Threads::create_vm(JavaVMInitArgs*, bool*)+0x1e2 V [libjvm.so+0x55ff34] JNI_CreateJavaVM+0x74 C [libjli.so+0x2f8e] JavaMain+0x9e --------------- PROCESS --------------- Java Threads: ( => current thread ) Other Threads: =>0x00007f8920007800 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=2251, stack(0x00007f8928493000,0x00007f8928594000)] VM state:not at safepoint (not fully initialized) VM Mutex/Monitor currently owned by a thread: None GC Heap History (0 events): No events Deoptimization events (0 events): No events Internal exceptions (0 events): No events Events (0 events): No events Dynamic libraries: 00400000-00401000 r-xp 00000000 ca:01 9384 /usr/java/jdk1.7.0_25/bin/java 00600000-00601000 rw-p 00000000 ca:01 9384 /usr/java/jdk1.7.0_25/bin/java 01f54000-01f75000 rw-p 00000000 00:00 0 [heap] 86600000-87ac0000 rw-p 00000000 00:00 0 87ac0000-8b800000 rw-p 00000000 00:00 0 8b800000-905b0000 rw-p 00000000 00:00 0 905b0000-d92b0000 rw-p 00000000 00:00 0 d92b0000-db980000 rw-p 00000000 00:00 0 db980000-100000000 rw-p 00000000 00:00 0 7f891d000000-7f891d270000 rwxp 00000000 00:00 0 7f891d270000-7f8920022000 rw-p 00000000 00:00 0 7f8920022000-7f8924000000 ---p 00000000 00:00 0 7f8925555000-7f892574d000 rw-p 00000000 00:00 0 7f892574d000-7f892574e000 ---p 00000000 00:00 0 7f892574e000-7f892584e000 rw-p 00000000 00:00 0 7f892584e000-7f892584f000 ---p 00000000 00:00 0 7f892584f000-7f892595a000 rw-p 00000000 00:00 0 [stack:2252] 7f892595a000-7f8925978000 rw-p 00000000 00:00 0 7f8925978000-7f892599f000 rw-p 00000000 00:00 0 7f892599f000-7f8925be6000 rw-p 00000000 00:00 0 7f8925be6000-7f8925bf1000 rw-p 00000000 00:00 0 7f8925bf1000-7f8925c0f000 rw-p 00000000 00:00 0 7f8925c0f000-7f8925c36000 rw-p 00000000 00:00 0 7f8925c36000-7f8925e7c000 rw-p 00000000 00:00 0 7f8925e7c000-7f8925e90000 rw-p 00000000 00:00 0 7f8925e90000-7f8925fb3000 rw-p 00000000 00:00 0 7f8925fb3000-7f8925fb4000 rw-p 00000000 00:00 0 7f8925fb4000-7f8925fcf000 r-xp 00000000 ca:01 17790 /usr/java/jdk1.7.0_25/jre/lib/amd64/libzip.so 7f8925fcf000-7f89261ce000 ---p 0001b000 ca:01 17790 /usr/java/jdk1.7.0_25/jre/lib/amd64/libzip.so 7f89261ce000-7f89261cf000 rw-p 0001a000 ca:01 17790 /usr/java/jdk1.7.0_25/jre/lib/amd64/libzip.so 7f89261cf000-7f89261db000 r-xp 00000000 ca:01 17544 /lib64/libnss_files-2.12.so 7f89261db000-7f89263da000 ---p 0000c000 ca:01 17544 /lib64/libnss_files-2.12.so 7f89263da000-7f89263db000 r--p 0000b000 ca:01 17544 /lib64/libnss_files-2.12.so 7f89263db000-7f89263dc000 rw-p 0000c000 ca:01 17544 /lib64/libnss_files-2.12.so 7f89263dc000-7f8926405000 r-xp 00000000 ca:01 17571 /usr/java/jdk1.7.0_25/jre/lib/amd64/libjava.so 7f8926405000-7f8926605000 ---p 00029000 ca:01 17571 /usr/java/jdk1.7.0_25/jre/lib/amd64/libjava.so 7f8926605000-7f8926607000 rw-p 00029000 ca:01 17571 /usr/java/jdk1.7.0_25/jre/lib/amd64/libjava.so 7f8926607000-7f8926614000 r-xp 00000000 ca:01 17789 /usr/java/jdk1.7.0_25/jre/lib/amd64/libverify.so 7f8926614000-7f8926813000 ---p 0000d000 ca:01 17789 /usr/java/jdk1.7.0_25/jre/lib/amd64/libverify.so 7f8926813000-7f8926815000 rw-p 0000c000 ca:01 17789 /usr/java/jdk1.7.0_25/jre/lib/amd64/libverify.so 7f8926815000-7f892681c000 r-xp 00000000 ca:01 17559 /lib64/librt-2.12.so 7f892681c000-7f8926a1b000 ---p 00007000 ca:01 17559 /lib64/librt-2.12.so 7f8926a1b000-7f8926a1c000 r--p 00006000 ca:01 17559 /lib64/librt-2.12.so 7f8926a1c000-7f8926a1d000 rw-p 00007000 ca:01 17559 /lib64/librt-2.12.so 7f8926a1d000-7f8926a9f000 r-xp 00000000 ca:01 17537 /lib64/libm-2.12.so 7f8926a9f000-7f8926c9e000 ---p 00082000 ca:01 17537 /lib64/libm-2.12.so 7f8926c9e000-7f8926c9f000 r--p 00081000 ca:01 17537 /lib64/libm-2.12.so 7f8926c9f000-7f8926ca0000 rw-p 00082000 ca:01 17537 /lib64/libm-2.12.so 7f8926ca0000-7f89276e1000 r-xp 00000000 ca:01 17795 /usr/java/jdk1.7.0_25/jre/lib/amd64/server/libjvm.so 7f89276e1000-7f89278e1000 ---p 00a41000 ca:01 17795 /usr/java/jdk1.7.0_25/jre/lib/amd64/server/libjvm.so 7f89278e1000-7f8927984000 rw-p 00a41000 ca:01 17795 /usr/java/jdk1.7.0_25/jre/lib/amd64/server/libjvm.so 7f8927984000-7f89279c0000 rw-p 00000000 00:00 0 7f89279c0000-7f8927b41000 r-xp 00000000 ca:01 7616 /lib64/libc-2.12.so 7f8927b41000-7f8927d41000 ---p 00181000 ca:01 7616 /lib64/libc-2.12.so 7f8927d41000-7f8927d45000 r--p 00181000 ca:01 7616 /lib64/libc-2.12.so 7f8927d45000-7f8927d46000 rw-p 00185000 ca:01 7616 /lib64/libc-2.12.so 7f8927d46000-7f8927d4c000 rw-p 00000000 00:00 0 7f8927d4c000-7f8927d4e000 r-xp 00000000 ca:01 17535 /lib64/libdl-2.12.so 7f8927d4e000-7f8927f4e000 ---p 00002000 ca:01 17535 /lib64/libdl-2.12.so 7f8927f4e000-7f8927f4f000 r--p 00002000 ca:01 17535 /lib64/libdl-2.12.so 7f8927f4f000-7f8927f50000 rw-p 00003000 ca:01 17535 /lib64/libdl-2.12.so 7f8927f50000-7f8927f66000 r-xp 00000000 ca:01 16704 /usr/java/jdk1.7.0_25/jre/lib/amd64/jli/libjli.so 7f8927f66000-7f8928166000 ---p 00016000 ca:01 16704 /usr/java/jdk1.7.0_25/jre/lib/amd64/jli/libjli.so 7f8928166000-7f8928167000 rw-p 00016000 ca:01 16704 /usr/java/jdk1.7.0_25/jre/lib/amd64/jli/libjli.so 7f8928167000-7f892817e000 r-xp 00000000 ca:01 7640 /lib64/libpthread-2.12.so 7f892817e000-7f892837d000 ---p 00017000 ca:01 7640 /lib64/libpthread-2.12.so 7f892837d000-7f892837e000 r--p 00016000 ca:01 7640 /lib64/libpthread-2.12.so 7f892837e000-7f892837f000 rw-p 00017000 ca:01 7640 /lib64/libpthread-2.12.so 7f892837f000-7f8928383000 rw-p 00000000 00:00 0 7f8928383000-7f89283a1000 r-xp 00000000 ca:01 9381 /lib64/ld-2.12.so 7f89283cb000-7f89283d5000 rw-p 00000000 00:00 0 7f89283d5000-7f892848b000 rw-p 00000000 00:00 0 7f892848b000-7f8928493000 rw-s 00000000 ca:01 8174 /tmp/hsperfdata_gurustrade/2250 7f8928493000-7f8928496000 ---p 00000000 00:00 0 7f8928496000-7f8928598000 rw-p 00000000 00:00 0 [stack:2251] 7f892859b000-7f892859e000 rw-p 00000000 00:00 0 7f892859e000-7f892859f000 r--p 00000000 00:00 0 7f892859f000-7f89285a0000 rw-p 00000000 00:00 0 7f89285a0000-7f89285a1000 r--p 0001d000 ca:01 9381 /lib64/ld-2.12.so 7f89285a1000-7f89285a2000 rw-p 0001e000 ca:01 9381 /lib64/ld-2.12.so 7f89285a2000-7f89285a3000 rw-p 00000000 00:00 0 7fff64527000-7fff64548000 rw-p 00000000 00:00 0 [stack] 7fff645ff000-7fff64600000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] VM Arguments: java_command: /home/gurustrade/proj/versions/trunk/gt_engine/gt_engine.jar Launcher Type: SUN_STANDARD Environment Variables: PATH=/usr/bin:/bin SHELL=/bin/sh Signal Handlers: SIGSEGV: [libjvm.so+0x8a26a0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 SIGBUS: [libjvm.so+0x8a26a0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 SIGFPE: [libjvm.so+0x73f3d0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 SIGPIPE: [libjvm.so+0x73f3d0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 SIGXFSZ: [libjvm.so+0x73f3d0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 SIGILL: [libjvm.so+0x73f3d0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004 SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000 SIGUSR2: [libjvm.so+0x73ed20], sa_mask[0]=0x00000000, sa_flags=0x10000004 SIGHUP: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000 SIGINT: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000 SIGTERM: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000 SIGQUIT: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000 --------------- SYSTEM --------------- OS:Linux uname:Linux 3.4.48-45.46.amzn1.x86_64 #1 SMP Wed Jun 12 02:04:44 UTC 2013 x86_64 libc:glibc 2.12 NPTL 2.12 rlimit: STACK 8192k, CORE 0k, NPROC 1024, NOFILE 4096, AS infinity load average:1.01 1.04 1.10 /proc/meminfo: MemTotal: 7633612 kB MemFree: 5784036 kB Buffers: 186424 kB Cached: 1025752 kB SwapCached: 0 kB Active: 980284 kB Inactive: 706036 kB Active(anon): 474096 kB Inactive(anon): 100 kB Active(file): 506188 kB Inactive(file): 705936 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 88 kB Writeback: 0 kB AnonPages: 474084 kB Mapped: 43752 kB Shmem: 156 kB Slab: 103892 kB SReclaimable: 84548 kB SUnreclaim: 19344 kB KernelStack: 9032 kB PageTables: 20180 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 3816804 kB Committed_AS: 2130476 kB VmallocTotal: 34359738367 kB VmallocUsed: 23908 kB VmallocChunk: 34359714455 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 7872512 kB DirectMap2M: 0 kB CPU:total 2 (4 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, tsc /proc/cpuinfo: processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz stepping : 10 microcode : 0xa07 cpu MHz : 2660.000 cache size : 6144 KB fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu tsc msr pae cx8 cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm dtherm tpr_shadow vnmi flexpriority bogomips : 5320.00 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz stepping : 10 microcode : 0xa07 cpu MHz : 2660.000 cache size : 6144 KB fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu tsc msr pae cx8 cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm dtherm tpr_shadow vnmi flexpriority bogomips : 5320.00 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: Memory: 4k page, physical 7633612k(5784036k free), swap 0k(0k free) vm_info: Java HotSpot(TM) 64-Bit Server VM (23.25-b01) for linux-amd64 JRE (1.7.0_25-b15), built on Jun 5 2013 20:48:36 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8) time: Mon Aug 5 16:11:16 2013 elapsed time: 0 seconds 

此外,我使用threadpoolexecutor具有30个核心线程和100个最大值(从不超过30个用户,尽管有时我使用全部30个)

最后,我使用了50个连接的用户bonecp连接池

有什么建议么? 🙂

建议之后,我从本地PC运行应用程序后添加了堆转储。 我怎么能从这里继续? 关键的橙色跳跃是重要的吗?还是只是重要的使用? 在此处输入图像描述

通过遵循以下建议,我能够解决几乎相同的错误:

https://confluence.csiro.au/pages/viewpage.action?pageId=278167841

基本上,他们说:

当Java虚拟机启动时,默认情况下它会生成许多垃圾收集(GC)线程,这些线程用于并行GC操作……此类线程的数量由以下公式计算:(ncpus <= 8)? ncpus:3 +((ncpus * 5)/ 8)...由于创建了这么多线程......程序会自动达到系统限制...

我使用环境变量限制了垃圾收集线程的数量,如下所示:

 export _JAVA_OPTIONS="-XX:ParallelGCThreads=2" 

不确定GC的整体性能影响,但至少今天的工作已经完成。

请查看原始post以获取更多选项。

祝你好运, – 斯图

如果您使用的是32位版本,请尝试64位版本的Java,

还添加了新的JVM参数“-XX:+ CMSClassUnloadingEnabled \”,它清除了一些未使用的类对象

如果你有更多物理ram可用的话。 似乎分配的堆大小只有1656 mb,这可能还不够。 尝试使用两个开关运行java jar文件-xmx4096mb和-xms 2048然后监视使用情况,可能内存需求对于您的应用程序来说太大了,如果您在一段时间后仍然内存不足则需要进一步调查以检查您的代码是否是泄露记忆。 希望这有帮助,如果您需要更多说明,请告诉我

堆只是等式的一部分。 看看总驻留内存 – 它包括堆和堆堆贡献。 Off heap包括映射的JAR,线程堆栈(每个线程约1MB),perm gen等。所以在Linux上有很多关于如何做的问题。

在不尝试解码转储数据的情况下,我会发现基本上有三种情况可以运行JVM内存:

  1. 具有允许累积大量未使用(但仍被引用)数据的结构(列表或诸如此类的列表)。
  2. 让各种“句柄”保持打开 – 文件句柄,线程,数据库操作。 特别是如果将API与本机组件一起使用,您可能会将大量内容留在GC的范围之外。
  3. 发出一个非常大的请求(或此类请求的“突发”)。

这里介于两类之间。 如果您运行动态创建和加载类的应用程序,则必须正确使用单个类加载器才能使类可收集。