精华内容
下载资源
问答
  • 我有由Jhipster生成的应用程序(使用gradle) .当应用程序从gradle(bootRun)启动时,设置... Java应用程序占用了大量内存 . 在更多微服务(更多JVM)的情况下,Java消耗了大量内存,因此无法使用 .我尝试过很多选项修改...

    我有由Jhipster生成的应用程序(使用gradle) .

    当应用程序从gradle(bootRun)启动时,设置JVM选项-Xmx -Xms的问题是特定的 .

    我正在寻找stackoverflow中的解决方案并尝试了很多来自论坛的建议....但没有一个对我有用 . Java应用程序占用了大量内存 . 在更多微服务(更多JVM)的情况下,Java消耗了大量内存,因此无法使用 .

    我尝试过很多选项

    修改build.gradle

    从命令行设置选项

    使用环境变量

    ....但是gradle总是忽略它 .

    使用gradle ver:gradlew --version

    Gradle 4.9

    制作时间:2018-07-16 08:14:03 UTC修订:efcf8c1cf533b03c70f394f270f46a174c738efc

    Kotlin DSL:0.18.4 Kotlin:1.2.41 Groovy:2.4.12 Ant:Apache Ant(TM)版本1.9.11编译于2018年3月23日JVM:1.8.0_172(Oracle Corporation 25.172-b11)操作系统:Linux 4.9.0 -6-amd64 amd64

    如果将应用程序作为docker容器启动,限制Jhipster应用程序的内存工作正常 .

    展开全文
  • 与程序的其余部分结合起来,使用中的内存很可能是64MB,我在某个地方在线阅读的是JVM内存分配池的defaulf大小。我不知道这是不是真的。 现在,是不是我做错了什么,因为设计的原因,我分配内存的方式是错误的?或者这是...

    我有一个循环可以产生很多线程。这些线程包含2个(大量)StringBuilder对象。然后这些线程运行并执行它们的操作。

    但是,我注意到,经过一定数量的线程后,我会发生奇怪的崩溃。我知道这是因为这些StringBuilder,因为当我减少它们的初始容量时,我可以启动更多的线程。现在,对于这些StringBuilder,它们在线程对象的构造函数中创建如下:

    StringBuilder A=新的StringBuilder(30000);

    StringBuilder B=新的StringBuilder(30000);

    它通常崩溃的地方是大约550个线程,这会导致略多于62MB的内存。与程序的其余部分结合起来,使用中的内存很可能是64MB,我在某个地方在线阅读的是JVM内存分配池的defaulf大小。我不知道这是不是真的。

    现在,是不是我做错了什么,因为设计的原因,我分配内存的方式是错误的?或者这是唯一的方法,我应该告诉JVM增加它的内存池吗?或者别的什么?

    另外,请不要告诉我设置一个较低的容量,我知道这些架线建设者在需要时会自动增加他们的容量,但我想有一个解决这个问题的方法。

    展开全文
  • 展开全部首先先说一下JVM内存结构问题,JVM为两e68a843231313335323631343130323136353331333238653339块:PermanentSapce和HeapSpace,其中Heap = {Old + NEW = { Eden , from, to } }。PermantSpace负责保存反射...

    展开全部

    首先先说一下JVM内存结构问题,JVM为两e68a843231313335323631343130323136353331333238653339块:PermanentSapce和HeapSpace,其中

    Heap = {Old + NEW = { Eden , from, to } }。PermantSpace负责保存反射对象,一般不用配置。JVM的Heap区可以通过-X参数来设定。

    当一个URL被访问时,内存申请过程如下:

    A. JVM会试图为相关Java对象在Eden中初始化一块内存区域

    B. 当Eden空间足够时,内存申请结束。否则到下一步

    C. JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收), 释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区

    D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区

    E. 当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)

    F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”out of memory错误”

    JVM调优建议:

    ms/mx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

    NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

    PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

    SurvivorRatio:设置Survivor空间和Eden空间的比例

    内存溢出的可能性

    1. OLD段溢出

    这种内存溢出是最常见的情况之一,产生的原因可能是:

    1) 设置的内存参数过小(ms/mx, NewSize/MaxNewSize)

    2) 程序问题

    单个程序持续进行消耗内存的处理,如循环几千次的字符串处理,对字符串处理应建议使用StringBuffer。此时不会报内存溢出错,却会使系统持续垃圾收集,无法处理其它请求,相关问题程序可通过Thread Dump获取(见系统问题诊断一章)单个程序所申请内存过大,有的程序会申请几十乃至几百兆内存,此时JVM也会因无法申请到资源而出现内存溢出,对此首先要找到相关功能,然后交予程序员修改,要找到相关程序,必须在Apache日志中寻找。

    当Java对象使用完毕后,其所引用的对象却没有销毁,使得JVM认为他还是活跃的对象而不进行回收,这样累计占用了大量内存而无法释放。由于目前市面上还没有对系统影响小的内存分析工具,故此时只能和程序员一起定位。

    2. Perm段溢出

    通常由于Perm段装载了大量的Servlet类而导致溢出,目前的解决办法:

    1) 将PermSize扩大,一般256M能够满足要求

    2) 若别无选择,则只能将servlet的路径加到CLASSPATH中,但一般不建议这么处理

    3. C Heap溢出

    系统对C Heap没有限制,故C Heap发生问题时,Java进程所占内存会持续增长,直到占用所有可用系统内存

    参数说明:

    JVM 堆内存(heap)设置选项

    参数格式

    说 明

    设置新对象生产堆内存(Setting the Newgeneration heap size)

    -XX:NewSize

    通过这个选项可以设置Java新对象生产堆内存。在通常情况下这个选项的数值为1 024的整数倍并且大于1MB。这个值的取值规则为,一般情况下这个值-XX:NewSize是最大堆内存(maximum heap size)的四分之一。增加这个选项值的大小是为了增大较大数量的短生命周期对象

    增加Java新对象生产堆内存相当于增加了处理器的数目。并且可以并行地分配内存,但是请注意内存的垃圾回收却是不可以并行处理的

    设置最大新对象生产堆内存(Setting the maximum New generation heap size)

    -XX:MaxNewSize

    通过这个选项可以设置最大Java新对象生产堆内存。通常情况下这个选项的数值为1 024的整数倍并且大于1MB

    其功用与上面的设置新对象生产堆内存-XX:NewSize相同

    设置新对象生产堆内存的比例(Setting New heap size ratios)

    -XX:SurvivorRatio

    新对象生产区域通常情况下被分为3个子区域:伊甸园,与两个残存对象空间,这两个空间的大小是相同的。通过用-XX:SurvivorRatio=X选项配置伊甸园与残存对象空间(Eden/survivor)的大小的比例。你可以试着将这个值设置为8,然后监控、观察垃圾回收的工作情况

    设置堆内存池的最大值(Setting maximum heap size)

    -Xmx

    通过这个选项可以要求系统为堆内存池分配内存空间的最大值。通常情况下这个选项的数值为1 024的整数倍并且大于1 MB

    一般情况下这个值(-Xmx)与最小堆内存(minimum heap size –Xms)相同,以降低垃圾回收的频度

    取消垃圾回收

    -Xnoclassgc

    这个选项用来取消系统对特定类的垃圾回收。它可以防止当这个类的所有引用丢失之后,这个类仍被引用时不会再一次被重新装载,因此这个选项将增大系统堆内存的空间

    设置栈内存的大小

    -Xss

    这个选项用来控制本地线程栈的大小,当这个选项被设置的较大(>2MB)时将会在很大程度上降低系统的性能。因此在设置这个值时应该格外小心,调整后要注意观察系统的性能,不断调整以期达到最优

    最后说一句,你的机器的连接数设置也至关重要,连接的关闭最好把时间设置的少些,那些连接非常耗费资源。也是引起内存泄露的主要原因。

    本回答由提问者推荐

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • Java多线程的内存可见性可见性:一个线程对共享变量值的修改,能够即使地被其他线程看到共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量Java内存模型(Java Memory ...
  • 可见性:一个线程对共享变量值的修改,能够及时的被其他线程...如果一个变量在多个线程的工作内存中都存在内存副本,那么这个变量就是这几个线程的共享变量Java内存模型(JMM):Java内存模型(Java Memory Model)描述...
  • Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)Java HotSpot(TM) Server VM (build 1.3.1_18-b01, mixed mode)F:\JDK\1.3.1\bin>java -server -Xmx1523M -versionError occurred during...
  • 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立线程,我的这篇文章http://www.mzone.cc/article/311.html也有介绍的。在内存...
  • Java jvm 内存参数限制

    2018-08-03 09:01:00
    nohup java -jar -Xms3g -Xmx3g jenkins.war > jenkins.log 2>&1 & 转载于:https://www.cnblogs.com/Presley-lpc/p/9411470.html
  • 1. 对一个正在运行着的进程来说,在不到达其内存使用量边界的情况下,扩大/缩小其cgroup分配的内存不会对它产生任何影响。2. 在进程已经使用了一定量的内存的情况下,缩小其cgroup内存至小于已使用的内存量,有两种...
  • Java应用程序在容器内执行时,JVM人体工程学(负责根据主机的功能动态分配资源)不知道它是在容器内运行,它计算Java应用程序要使用的资源数量基于正在执行容器的主机.鉴于此,如果为容器设置限制并不重要,JVM将把主机...
  • 如何设置Docker容器中Java应用的内存限制关注:85答案:2mip版解决时间 2021-01-30 11:46提问者时光盗走我的心2021-01-30 07:00如何设置Docker容器中Java应用的内存限制最佳答案二级知识专家寄出个心动2021-01-30 08:...
  • Parenthesis时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte描述ToParenthesis时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte描述To a computer,there is no difference between the ...
  • 原标题:容器中的Java内存限制:LXC、Docker与OpenVZ开发者在使用JVM、内存与Docker时是否遭遇到难题?今天我们将一同利用Jelastic将其解决。最近Matt Willaims提起的Docker内Java及其内存限制的议题得到了广泛关注...
  • jcgroup jcgroup is a cgroup wrapper on JVM. You could use this library to limit the CPU shares, Disk I/O speed, Network bandwidth and etc of a thread.Subsystems☑ blkio☑ common☑ cpu☑ cpuacct☑ ...
  • Java内存大小限制

    千次阅读 2010-07-03 21:33:00
    我们在运行Java程序时,特别是跑app server时,经常需要调大JVM的heap大小。通过-Xms256m -Xmx256m的参数形式区设置heap的大小,还有-XX:MaxNewSize=256m -XX:MaxPermSize=256m的参数形式设置perm space的内存大小。...
  • Docker可以设置内存和CPU限制,而Java不能自动检测到。使用Java的Xmx标识(繁琐/重复)或新的实验性JVM标识,我们可以解决这个问题。加强Docker容器与Java10集成 - Docker官方博客在最新版本的Java的OpenJ9和OpenJDK...
  • java 虚拟机的内存限制

    千次阅读 2011-09-19 10:05:10
    Linux系统中JVM内存2GB的限制   有些用户反映在Linux系统中运行的Java应用,内存只能使用到2GB,在Java虚拟机中如果把-Xmx参数设置到2GB左右(约1.5-1.8GB),java进程就根本启动不了。我们通常使用的JVM都是32位...
  • 因tomcat生产环境总记不住修改位置,分享调整JVM内存限制java -version //当前java版本1.7_65 改完刷新java环境变量 希望可以帮到您,感谢!
  • 一、前言1、变量Java内存模型的主要目标是定义程序中各个变量(非局部变量与方法参数)的访问规则 ,即在虚拟机中将变量存储到内存和从内存中取出变量...为了获得较好的执行效能,Java内存模型并没有限制执行引擎使...
  • java HashMap 极限容量 大小限制 占用内存大小 文章摘自:java HashMap 极限容量 大小限制 占用内存大小
  • 我在一个翻译程序中要读取一个很大的字典文件,每次查找一个词时都读取文件很消耗时间,所以我想把整个文件读到内存中,但在运行时好象只能读到10000行,源程序大致如下:publicclassReadThreadextendsThreads{...
  • 我想增加IDE可以使用的最大内存。我将Info.plist文件中的VMOptions设置为-Xmx2048m -ea -XX:HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath / a:../ lib / boot.jar当我打开IDEA,我仍然看到最大内存...
  • java堆溢出java堆用于存储对象实例,只要不断地创建对象,并且保证gc roots到对象之间有可达路径来避免垃圾回收机制来清楚这些对象,那么在 对象到达最大堆的容量限制后就会产生内存溢出溢出。异常:java.lang....
  • 前言Java微服务能像Go微服务一样快吗?这是我最近一直在思索地一个问题。去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nelson和Peter Nagy就对此做过一系列基础的的测试用以比较。接下来就给...
  • 1、Java内存溢出Java内存主要用于存放对象实例,只要不断的创建对象,并且摆正GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象创建数量达到堆内存容量限制之后就会产生堆内存...
  • PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制, -XX:PermSize=64MB 最小尺寸,初始分配 -XX:MaxPermSize=256MB ...
  • 增加java虚拟机可用最大内存(2010-10-30 17:58:26)标签:杂谈java虚拟机可使用的最大内存是有限制的,缺省值通常为64MB或128MB。如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存,比如超过了默认的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,041
精华内容 4,016
关键字:

java限制内存

java 订阅