Linux内存问题。。用java程序

Linux内存问题。。用java程序,java,linux,memory,Java,Linux,Memory,可能重复: 我正在运行一个java程序,但是当内存使用率达到26.1%时,它不再增加,程序变得非常慢 有什么问题吗?java对内存使用有限制吗?或者linux上每个应用程序的内存是否有限制 java版本“1.7.0_11” Java(TM)SE运行时环境(build 1.7.0_11-b21) Java HotSpot(TM)64位服务器虚拟机(构建23.6-b04,混合模式) 任务:总共126项,1项运行,125项睡眠,0项停止,0项僵尸 Cpu:97.5%us、0.4%sy、0.0%ni

可能重复:

我正在运行一个java程序,但是当内存使用率达到26.1%时,它不再增加,程序变得非常慢

有什么问题吗?java对内存使用有限制吗?或者linux上每个应用程序的内存是否有限制

java版本“1.7.0_11” Java(TM)SE运行时环境(build 1.7.0_11-b21) Java HotSpot(TM)64位服务器虚拟机(构建23.6-b04,混合模式)


任务:总共126项,1项运行,125项睡眠,0项停止,0项僵尸
Cpu:97.5%us、0.4%sy、0.0%ni、2.1%id、0.0%wa、0.0%hi、0.0%si、0.0%st
内存:总计33018800k,使用9522548k,空闲23496252k,缓冲区12100k
交换:总计32764528k,已使用0k,免费32764528k,缓存391812k
PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令
3463元24208769M 8.2g 9.8m S 391.326.1257:09.24爪哇
3725 hong8e 20 0 14876 1148 872 R 0.30.0:01.81顶部
1根20 0 4088 972 720 S 0.0 0.0 0:00.71初始值
2根15-5 0 0 0 S 0.0 0 0:00.00 kthread
3根RT-5 0 0 S 0.0 0 0:00.17迁移/0
4根15-5 0 0 0 S 0.0 0 0:00.00 ksoftirqd/0
5根RT-5 0 0 0 S 0.0 0 0:00.00看门狗/0
6根RT-5 0 0 S 0.0 0 0:00.15迁移/1
7根15-5 0 0 0 S 0.0 0 0:00.00 ksoftirqd/1

默认情况下,Java的堆大小限制为64Mb(如果是内存服务器…),您可以使用命令行参数增加堆大小,但在增加堆大小之前,请确保您需要额外的内存并且没有泄漏。

默认情况下,Java服务器版本的最大堆大小为主内存的1/4。由于库和线程堆栈的开销很小,很容易占用主内存的26%或27%

当JVM开始填满时,执行GC所需的时间较低,而较低的可用内存意味着它也会更频繁地发生(非常糟糕),理想情况下,实际使用率可能会低至最大大小的40%。在您的情况下,实际使用量可能至少为7GB


我建议您尝试将最大堆大小增加到至少16GB,如果可以节省内存,可能是24GB。i、 例如,
-Xmx16g
-Xmx24g

将代码粘贴到此处..或尝试在末尾进行java评测虽然32位windows的最大内存默认为64 MB,但他在UNIX上已经使用了8 GB,因此不适用于此处。无论如何,您的解决方案都是合适的,因此+1不会记录
mx
选项。@MarkoTopolnik但它确实说
-X
选项是“非标准的”。
-mx
选项保留在Java1.1中,它是一个文档化的选项。从概念上讲,该选项可能是非标准的,但“非标准”选项是标准的,“标准”选项是非标准的最后,我使用了最简单的选项,因为Java 8支持
-mx
-ms
,并且不会很快消失。@PeterLawrey感谢您的回答。但是当我运行另一个程序(程序名是CRF++,它是用C++语言编写的机器学习程序)时,程序内存使用率也为26.1%,并且不再增加。C++也有相同的内存限制?或者linux系统有内存使用限制?@Hong seokKwon操作系统有限制,但这是一个硬限制,通常非常高。如果应用程序试图超过它,而不仅仅是减慢速度,它就会失败。运行
ulimit-a
查看设置的限制。我不知道有什么理由,C++程序会使用相同数量的内存,除非它运行JVM来完成大部分工作。