热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebLogicMEM_ARGS參數設定

WebLogic用了一段時間之後,偶爾總是會出現OutOfMemory,這對測試環境來說,還只要RestartServer就可以解決,但是在正式環境上出現可就麻煩大了,因為一Re

WebLogic用了一段時間之後,偶爾總是會出現OutOfMemory,這對測試環境來說,還只要Restart Server 就可以解決,但是在正式環境上出現可就麻煩大了,因為一Restart Server 所有User就都無法使用系統,所以MEM_ARGS這個參數的設定就很重要。

這是我SIT目前的設定,依不同的系統做不同的設定
MEM_ARGS="-Xms768m -Xmx768m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=384m -XX:PermSize=384m -XX:SurvivorRatio=6 -XX:+DisableExplicitGC" 
提示:以上記得要寫成一行。

Heap Size設定 
-Xms
 設定一開始的Heap Size。
-Xmx 設定Heap Size的最大值 (最好是不是超過實體記憶體的80%)。
-XX:NewSize 調整JVM的Young Generation的size大小。
-XX:MaxNewSize 調整JVM的Young Generation的size的最大值。
- Xmn Young Generation的size,NewSize 和 MaxNewSize設定為一樣。
-XX:NewRatio 控制Young generation的比例,如-XX:NewRatio=3表示Young generation與Old generation的比例為1:3,即Young generation佔1/4,Old generation佔3/4。
Young generation又被分成三部分,第一部分Eden,用於生成新的Object。另外兩個部分為Survivor空間,當Eden用完後,會將 Objects複製到"SS1",當SS1空間滿了的時候,再被複製到"SS2",Objects會在Survivor空間不斷的被複製,直到他滿足條件 進入Old generation止。
提示:如果將Heap Size設的越大,GC的週期就會拉長,而且每次GC的時間也會越長。

PermGen space
-XX:PermSize 這一部分是用於存放Class和Meta的訊息,Class在被 Load的時候被放入PermGen space區域,它和和存放Instance的Heap區域不同,GC(Garbage Collection)不會在主程式運行期間對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。這種錯誤常見在web伺服器對JSP進行pre compile的時候。

整個記憶體配置會像這樣 

-XX:+DisableExplicitGC 加了這個參數會停止掉WLS或是程式內直接呼叫GC,減少不必要的GC,將GC交由JVM去執行。

Garbage Collection描述: 
Garbage Collection分多種等級,0級就是全部的垃圾回收(Full GC),會回收Old generation中的垃圾;1級或以上為部分垃圾回收,只會回收Young中的垃圾,會發生OutOfMemory通常是產生於Old generation或Perm段垃圾回收后,仍然沒有記憶體空間來存放新的Java 物件的情況。

當一個URL被訪問時,記憶體的配置過程如下:
A. JVM會試圖為Java的相關對象在Eden中初始化一塊記憶體空間
B. 當Eden空間足夠時,記憶體配置結束。否則到下一步
C. JVM會試圖釋放在Eden中所有不活躍的對象(這是屬於1或更高級的垃圾回收);釋放後若Eden空間仍然不足以放入新對象,則會試圖將部分Eden中活躍的對象放入Survivor區/OLD區
D. Survivor區被用來作為Eden及OLD的中間交換區域,當OLD區空間足夠,Survivor區的對象會被移到Old區,否則被保留在Survivor區
E. 當OLD區空間不足時,JVM會在OLD區進行完全的垃圾收集(0級)
F. 完全垃圾收集后,若Survivor及OLD區仍然無法存放從Eden複製過來的部分對象,就會導致JVM無法在Eden區為新的對象配置出記憶體區塊,產生"out of memory的錯誤"

以我的設定為例: 
MEM_ARGS="-Xms768m -Xmx768m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=384m -XX:PermSize=384m -XX:SurvivorRatio=6 -XX:+DisableExplicitGC"

在上面的例子中:
YOUNG+OLD: 768M
YOUNG: 256M
Perm: 384M
Eden: YOUNG*6/(6+1+1)=192M
Survivor: YOUNG*1/(6+1+1)=32M

Heap Size: YOUNG+OLD+Perm=1024M

  以上是WebLogic記憶體參數的一些基本的設定,太難的我也不會,只是整理一些心得而己,提供做一下參考

堆( Heap)是 Java 程序的对象生活的地方,包含活的对象,死的对象以及剩余内存 。

    当对象不能被运行中的程序的指针所到达时,这些对象成为”垃圾“。

    JVM 的堆大小决定了 VM 花费在收集垃圾上的时间和频度。

    收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。

    如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。

    如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。

    调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。

    在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。

    堆划分为两个区域:新生代和旧生代。

    新生代又分为:Eden 和两片生存空间(survivor spaces)。其中保证有一片空间在任何时间是空的,当垃圾收集发生时, Eden 中的活的对象复制到下一片生存空间,对象就在生存空间之间复制,直到到达最大门限值(老化),然后复制到旧生代。

    Eden 是新的对象分配的地方。

    很多对象分配以后很快成为垃圾,这些对象称为具有 "infant mortality."
    对象生存的时间越长,需要的收集时间也越长,因此,收集变慢。

    你的应用建立和释放对象的速度决定了垃圾收集的频度。因此,在编程时,应注意使用对象的缓冲,而不是新建立对象。

    大多数对象在新生代就已经死去,因此你能有效的调整垃圾收集。如果你能安排大多数对象的生存期小于一个收集时间,那么,垃圾收集是十分高效的。

    错误的”代“配置会导致频繁的垃圾收集,影响系统性能。

    如果系统花费很多的时间收集垃圾,请减小堆大小。

    一次完全的垃圾收集应该不超过 3-5 秒。

    一般说来,你应该使用物理内存的 80% 作为堆大小。

    在最大工作负荷的时候,监视 WebLogic 的性能。

    使用 -verbosegc 选项测量有多少时间和资源用于垃圾收集。

    打开垃圾收集的详细信息输出以及重定向:

    % java -ms64m -mx64m -verbosegc -classpath $CLASSPATH
    -Dweblogic.domain=mydomain -Dweblogic.Name=clusterServer1
    -Djava.security.policy==/bea/weblogic6x/lib/weblogic.policy
    -Dweblogic.management.server=192.168.0.101:7001 -Dweblogic.management.username=system
    -Dweblogic.management.password=systemPassword weblogic.Server >> logfile.txt
    在 Solaris 系统上,采用下面的命令:

    weblogic.Server > server.out 2>&1
    Java HotSpot VM 选项
    标准的选项在各种平台都已经有介绍:

    http://java.sun.com/j2se/1.3/docs/tooldocs/win32/java.html 
    http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html 
    http://java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html 
    以 -X 开头的选项都为非标准选项(并不能在所有的 VM 上实现),在后续的版本中可能会不通知而变更。

    由于 -XX 选项需要特别的系统权限,因此不建议随便使用。

    在 1.3.0 之前的版本, J2SDK 的 Solaris 版本带有一个虚拟机的实现叫做 Exact VM(EVM),从 1.3.0 开始这个虚拟机被 Java HotSpot VM 所取代。

    Java HotSpot VM 目前认识下面的 -X 选项:

    -Xincgc 使用训练 GC
    -Xnoincgc 不是用训练 GC(缺省)

    -XX:MaxHeapFreeRatio= 最大堆剩余百分比(缺省 70)

    -X:MinHeapFreeRation= 堆最小剩余百分比(缺省 40)

    -Xint 只作解析 (不作 JIT 编译)

    -XX:+UseBoundThreads 绑定用户级别的线程 (只针对 Solaris)

    -Xmn 设置年轻一代的大小( young generation )(只对 1.4)

    对象分配在 Eden,并且在这里死亡,当 Eden 满时,引起一个小的收集(minor collection),一些生存的对象被移动到旧生代,如果旧生代需要收集,则引起大收集(major collection ),这会比较缓慢。

    如果 GC 成为瓶颈,那么需要指定代的大小,检查 GC 的详细输出,研究 GC 参数对性能的影响。

    旧生代的收集采用 mark-compact 的方式,其中的一部分叫做”永久代“(permanent generation)很特别,他包括了 JVM 自身的所有反映数据(reflective data),例如类以及方法。

    暂停时间的含义是应用因为垃圾收集而显示出来的短暂停顿。

    吞吐量的含义是在一段比较长的时间内,没有用在垃圾收集的时间和总时间的百分比。

    减少暂停时间的办法可以采用小的年轻代和增量收集,但是这以牺牲吞吐率为代价。

    Footprint 是一批工作进程的集合,以页和缓冲行数计量,在物理内存有限或者有很多处理器的系统里,footprint 可代表伸缩性。

    Promptness 是对象死去的时间和内存变为可用时的时间差,在分布系统中(包括 RMI)需要考虑。

    很大的新生代能提高吞吐率,但是牺牲了 footprint 和 promptness。

    Solaris 的 footprint 可以采用 pmap 命令来查看。

    [GC 325407K->83000K(776768K), 0.2300771 secs]
    [GC 325816K->83372K(776768K), 0.2454258 secs]
    [Full GC 267628K->83769K(776768K), 1.8479984 secs]
    上面的三行是 GC 的详细输出,我们可以看到两次小收集和一次大收集。箭头前后的两个数字代表 GC 后活的对象的组合长度。括号内的数字代表合计的空间,等于堆大小减去一片生存空间。

    除非你遇到暂停的问题,否则,可以分配足够的内存给 JVM,缺省的 64MB 总是太小。

    设置 -Xms 和 -Xmx 为同样的值能提高 JVM 的预测,但是如果你的选择不对的话, JVM 不会补偿。

    当增加处理器时,记得增加内存,因为分配可以并行进行,而 GC 不是并行的。

    NewSize 和 MaxNewSize 绑定新生代的长度的低端和高端,设置为一样大小时和 -Xms 和 -Xmx 一样解决新生代的预测时间。

    如果生存空间太小,拷贝直接进入旧生代,如果太大的话,会空闲在那里。

    除非你碰到过渡的大收集或者暂停时间,否则分配足够的内存给新生代,缺省的 MaxNewSize (32MB) 往往太小。

    如果需要的话,最大的永久代大小可以使用 MaxPermSize 增加。

    直接的 GC 调用可以采用 -XX:+DisableExplicitGC 来关闭。

    对于大服务器 而言,1.4 的 JVM 能提供 64 bit 寻址能力,提供更大的新生代大小,并发收集来减少大收集引起的暂停的影响。

    Java HotSpot Client VM 主要用于减少应用启动时间以及内存的 footprint 。

    Java HotSpot Server VM 和 Java HotSpot Client VM 类似,但是在最大性能上作了调整。用于长期运行的服务应用。

    Solaris 和 Linux 的 J2SE 1.3 随带 Java HotSpot Server VM 预安装。


推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
author-avatar
两只兔子哦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有