精华内容
下载资源
问答
  • 展开全部首先先说一下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应用程序在容器内执行时,JVM人体工程学(负责根据主机的功能动态分配资源)不知道它是在容器内运行,它计算Java应用程序要使用的资源数量基于正在执行容器的主机.鉴于此,如果为容器设置限制并不重要,JVM将把主机...

    当Java应用程序在容器内执行时,JVM人体工程学(负责根据主机的功能动态分配资源)不知道它是在容器内运行,它计算Java应用程序要使用的资源数量基于正在执行容器的主机.鉴于此,如果为容器设置限制并不重要,JVM将把主机的资源作为进行计算的基础.

    从JDK 8u131和JDK 9开始,有一个实验性VM选项,允许JVM人体工程学从CGgroups读取内存值.要启用它,您必须将以下标志传递给JVM:

    -XX:+UnlockExperimentalVMOptions and -XX:+UseCGroupMemoryLimitForHeap

    如果启用这些标志,JVM将知道正在容器内运行并且将使JVM符合人体工程学,以根据容器限制而不是主机的功能来计算应用程序的资源.

    启用标志:

    $java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar app.jar

    您可以使用ENV变量将JVM选项动态传递到容器.

    例:

    运行您的应用程序的命令类似于:

    $java ${JAVA_OPTIONS} -jar app.jar

    docker run命令需要传递ENV变量,如下所示:

    $docker run -e JAVA_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap" myJavaImage

    希望这可以帮助!

    展开全文
  • 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...

    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 -version

    Error occurred during initialization of VM

    Could not reserve enough space for object heap

    F:\JDK\1.3.1\bin>java -classic -Xmx2047M -version

    java version “1.3.1_18″

    Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)

    Classic VM (build 1.3.1_18-b01, native threads, nojit)

    F:\JDK\1.3.1\bin>java -classic -Xmx2048M -version

    Bad max heap size: -Xmx2048M

    Could not create the Java virtual machine.

    =====================================================================

    F:\JDK\1.4.2\bin>java -version

    java version “1.4.2_12″

    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

    Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

    F:\JDK\1.4.2\bin>REM The default VM is client.

    F:\JDK\1.4.2\bin>java -client -Xmx1308M -version

    java version “1.4.2_12″

    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

    Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

    F:\JDK\1.4.2\bin>java -client -Xmx1309M -version

    Error occurred during initialization of VM

    Could not reserve enough space for object heap

    F:\JDK\1.4.2\bin>java -server -Xmx1308M -version

    java version “1.4.2_12″

    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)

    Java HotSpot(TM) Server VM (build 1.4.2_12-b03, mixed mode)

    F:\JDK\1.4.2\bin>java -server -Xmx1309M -version

    展开全文
  • 如何设置Docker容器中Java应用的内存限制关注:85答案:2mip版解决时间 2021-01-30 11:46提问者时光盗走我的心2021-01-30 07:00如何设置Docker容器中Java应用的内存限制最佳答案二级知识专家寄出个心动2021-01-30 08:...

    如何设置Docker容器中Java应用的内存限制

    关注:85  答案:2  mip版

    解决时间 2021-01-30 11:46

    e6cb1a03ad541b3098697807b7bf1798.png

    提问者时光盗走我的心

    2021-01-30 07:00

    如何设置Docker容器中Java应用的内存限制

    最佳答案

    e6cb1a03ad541b3098697807b7bf1798.png

    二级知识专家寄出个心动

    2021-01-30 08:26

    docker run 命令可以对cpu和内存限制,目前没有直接对磁盘限制

    Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container -c, --cpu-shares=0 CPU shares (relative weight) -m, --memory="" Memory limit (format: , where unit = b, k, m or g)

    全部回答

    e6cb1a03ad541b3098697807b7bf1798.png

    1楼寄出个心动

    2021-01-30 09:31

    如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数。比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例

    docker run --rm -e JAVA_OPTS='-Xmx512m' tomcat:8

    在日志中,我们可以清楚地发现设置已经生效 “Command line argument: -Xmx512m”

    02-Apr-2016 12:46:26.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.32

    02-Apr-2016 12:46:26.974 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19:34:53 UTC

    02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.0

    02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux

    02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.1.19-boot2docker

    02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64

    02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre

    02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_95-b00

    02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation

    02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat

    02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat

    02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

    02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

    02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512m

    ...

    然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内

    我要举报

    如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

    →点此我要举报以上信息!←

    推荐资讯

    大家都在看

    展开全文
  • java常用内存设置

    2021-03-01 08:40:14
    Java虚拟机具有一个堆,是运行时的数据区域,所有类实例和数组内存均从此处分配。堆是在java虚拟机启动时创建的。堆是留给开发人员用的内存区域。非堆就是JVM留给自己用的(方法区,JVM内部处理或优化所需的内存,...
  • When we start threads in a Java program, is there any way for us to assign memory limit to each one of them?I mean we assign something like this for a new Java process:/usr/java/default/bin/java -Xms5...
  • Say, "run myApp.jar with cpu=800 and memory=1024"Ive been doing java programming for many years and it is an embarrasment to ask this question. I don't even know whether this is possible or not. And i...
  • 1. 问题背景 公司内部,使用springboot...通过命令查看docker服务内存使用情况,发现一个小小的Java服务内存竟然用到了1G以上,真的是惊呆了。(以内网环境服务进行说明): a. 通过查看docker服务内存使用情况
  • 这个内存结构是基于java8的内存结构,最文章末尾也会和java7的内存结构进行一个比较,看看哪些地方进行了改变,这些改变对性能的影响是什么。还有一点这个是基于Hotspot虚拟机来说的。先给一张java8的内存结构图吧...
  • 查看java内存情况命令

    2021-02-26 14:15:26
    jinfo:可以输出并修改运行时的java 进程的opts。jps:与unix上的ps类似,用来显示本地的java进程,可以...jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。jconsole:一个...
  • java内存设置

    2021-02-25 18:50:40
    JVM启动以后,会分配两类内存区域,一类用于开发人员使用,比如保存一些变量,对象等,一类JVM自己使用,比如存放一些class类和描述。一、第一类内存区域又可以分为栈(stack)、堆(heap),还有一些静态存储区域,这...
  • 最近突然遇到个问题:用 idea 跑 Tomcat 服务,不到30分钟 内存就吃完了。用任务管理器查看,发现 java.exe占了10G内存!!查了各种方法一、 idea Tomcat 配置没用!!!二、idea idea64.exe.vmoptions安装目录下的 ...
  • 1. 对一个正在运行着的进程来说,在不到达其内存使用量边界的情况下,扩大/缩小其cgroup分配的内存不会对它产生任何影响。2. 在进程已经使用了一定量的内存的情况下,缩小其cgroup内存至小于已使用的内存量,有两种...
  • Java使用比堆大小更多的内存(或正确的Docker内存限制大小)对于我的应用程序,Java进程使用的内存远远超过堆大小。容器正在运行的系统开始出现内存问题,因为容器占用的内存比堆大小多得多。堆大小设置为128 MB(-Xmx...
  • java内存泄露与内存溢出基本概念内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存。即被分配的对象可达但已无用。内存溢出:指程序运行过程中无法申请到足够的内存而导致的一...
  • jinfo:可以输出并修改运行时的java 进程的opts。jps:与unix上的ps类似,用来显示本地的java进程,可以...jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。jconsole:一个...
  • java-jar-Xms1024m-Xmx1536m-XX:PermSize=128M-XX:MaxPermSize=256MXXX.jarjava-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M MyClass说明:后面是JVM的参数-Xms128m JVM初始分配的堆内存-Xmx512m JVM...
  • 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立线程,我的这篇文章http://www.mzone.cc/article/311.html也有介绍的。在内存...
  • linux 设置java内存

    2021-05-15 03:50:13
    linux 设置java内存[2021-02-03 18:47:06]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。...
  • java 内存设置

    2021-03-26 10:49:53
    去掉了一些不用的服务 JVM内存JAVA_OPTS参数说明 我经常会这样来设置服务器端的JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k" -server:一定要作为第一个参数,在多个CPU时性能佳刘兵召写于2008-12-25 12:40...
  • 在运行java桌面应用程序的时候,有时候会因为jvm内存太小,从而内存溢出,程序崩溃。可是通过修改 eclipse.ini 中的参数,来实现修改jvm的内存大小。-vmargs-Xms128M-Xmx512M-XX:PermSize=64M-XX:MaxPermSize=128M...
  • Dokcer 容器如何限制内存我们知道docker使用Linux内核的 CGroup 来实现限制容器的资源使用(CPU,内存), 然而 CGroup 功能是到2007年才加入 Linux2.6.24 内核的,一些可以从运行时环境收集信息的应用程序再 CGroup ...
  • I have been scouring the internet to find out how much memory a java process can take on a linux (red-hat) machine. ( I am not talking about heap; rather, the entire amount of memory taken up by the ....
  • 写了一个Java服务,没有定时服务,没有线程池,没有重度的读写,只是对外提供了几个接口,接口的访问量并不高,结果占用内存一会就会飙升到80%+; 1. 报错如下图 2. 解决办法 jmap这篇文章写的很细致,可以大致...
  • 我已经写了一个Java程序并运行它,同时指定了XMX标志(也使用XMS = XMX来强制JVM预先分配所有的内存)。为了进一步保护JVM优化,我主动分配X个10MB对象。我在许多JVM上运行了许多测试,增加了XMX的价值,同时使用Sun和...
  • 内存分析文章涉及JVM的垃圾回收,主要讲的是通过使用「堆外内存」对Young GC进行优化。文章中介绍,MsgBroker消息中间件会对消息进行缓存,JVM需要为被缓存的消息分配内存,首先会被分配到年轻代。当缓存中的消息...
  • 我在一个翻译程序中要读取一个很大的字典文件,每次查找一个词时都读取文件很消耗时间,所以我想把整个文件读到内存中,但在运行时好象只能读到10000行,源程序大致如下:publicclassReadThreadextendsThreads{...
  • 展开全部请确保java_home/bin配置到path环境变量下,因为这些工具都在32313133353236313431303231363533e4b893e5b19e31333363373139jdk的bin目录下jps(JVM Process Status Tool):JVM机进程状况工具用来查看基于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 376,263
精华内容 150,505
关键字:

java服务限制内存

java 订阅