IBM Websphere培训——JVM相关参数配置和问题诊断
JVM常用参数设置(针对G1GC)
JVM常用参数设置(针对G1GC)Java虚拟机(JVM)是Java程序的运行环境,在JVM中,存在很多参数可以对其进行配置以优化Java应用程序的性能。
本文将介绍G1GC垃圾收集器常用的JVM参数设置。
G1GC(Garbage-First Garbage Collector)是JVM中的一种垃圾收集器,它是在Java 7 update 4之后引入的,并在Java 9中成为默认垃圾收集器。
G1GC的目标是为了更好地处理大内存的堆和长暂停时间,通过将堆内存划分成多个小区域(Region),并使用多线程来并行扫描、标记和压缩堆内存中的垃圾对象。
以下是一些常用的JVM参数设置,可以针对G1GC进行调整:1. -Xms:设置JVM的初始堆内存大小。
例如,-Xms2g将初始堆内存设置为2GB。
2. -Xmx:设置JVM的最大堆内存大小。
例如,-Xmx8g将最大堆内存设置为8GB。
3. -XX:+UseG1GC:启用G1GC垃圾收集器。
4. -XX:MaxGCPauseMillis:设置G1GC的最大垃圾收集停顿时间(单位:毫秒)。
默认值为200毫秒,可以根据实际需求进行调整。
较大的值可以减少垃圾收集的频率,但也会增加每次垃圾收集的停顿时间。
5. -XX:G1HeapRegionSize:设置G1GC中每个Region的大小。
默认值为堆内存的1/2048、较小的Region可以提高并行性和垃圾收集的效率,但同时也会增加垃圾收集器的元数据开销。
6. -XX:InitiatingHeapOccupancyPercent:设置G1GC开始执行垃圾收集的堆占用比例。
默认值为45%,当堆的占用率达到该比例时,G1GC将开始执行垃圾收集。
可以根据应用程序的内存使用情况进行调整。
7. -XX:ConcGCThreads:设置G1GC的并发垃圾收集线程数。
默认值为根据CPU核数动态计算的值。
可以根据实际硬件环境进行调整,较多的线程可以提高并发性能。
websphere 教程
WebSphere 教程什么是 WebSphere?WebSphere 是一个由 IBM 创建的 Java 应用服务器软件平台。
它提供了一个可靠的运行环境,用于部署和管理企业级 Java应用程序。
WebSphere 不仅仅是一个应用服务器,它还包括了许多其他组件和工具,用于构建、部署和管理复杂的企业级应用程序。
WebSphere 的特性WebSphere 提供了许多强大且丰富的特性,使得它成为一个受欢迎的企业级应用服务器选择。
下面是一些 WebSphere的主要特性:1. 高可伸缩性和高可用性WebSphere 能够处理大量的并发请求,并能够动态地根据负载情况自动伸缩。
它还提供了故障恢复机制,确保应用程序的可用性和可靠性。
2. 分布式架构WebSphere 使用分布式架构,可以在多台服务器上部署应用程序,并能够自动进行负载平衡和故障恢复。
这使得它非常适合构建和管理大规模的企业应用程序。
3. 安全性WebSphere 提供了多层次的安全机制,包括身份验证、授权和数据加密等功能。
它还支持常见的安全标准和协议,如SSL/TLS 和 LDAP。
4. 事务管理WebSphere 提供了强大的分布式事务管理功能,可以确保应用程序在分布式环境中的一致性和可靠性。
它支持常见的事务管理标准,如 JTA 和 XA。
5. 集成能力WebSphere 提供了丰富的集成能力,允许应用程序与其他系统进行无缝集成。
它支持多种协议和标准,如 JMS、Web Services、JCA 和 JDBC。
6. 管理工具WebSphere 提供了一套强大的管理工具,用于配置、监控和管理应用程序和服务器。
这些工具能够帮助开发人员和管理员更轻松地管理复杂的应用程序环境。
如何安装 WebSphere以下是安装 WebSphere 的简要步骤:1.下载 WebSphere 安装文件,可在 IBM 的官方网站上找到相关版本。
2.运行安装程序,并按照提示完成安装向导。
WAS参数设置和调整
1.1.1.1W A S参数设置和调整本章节讨论的是WAS的参数设置。
其中部分参数,必须要结合运行环境的实际情况来调整,例如Web Container的线程池大小、数据源连接池大小、语句高速缓存大小(Prepared statement cache size),这几项参数都很重要,要结合实际的并发量和服务器的资源利用情况进行调整。
目前本章节设置的值是根据开发项目组在平时测试中的经验得出。
将来是否要更改请参见最后的“资源监控和参数调整方法”章节。
1、JVM参数:进入WAS的管理控制台在左边的菜单栏中点击“服务器> 应用程序服务器”,然后在右边的应用服务器页面上点击“server1”:出现如下页面,找到“服务器基础结构”一栏,展开“Java和进程管理”,点击“进程定义”:出现如下页面,在“其他属性”一栏点击“Java虚拟机”:出现如下页面,设置server1的JVM堆大小:初始堆大小为512M,最大堆大小为1024M。
注意下图中红色椭园形中的“详细垃圾回收”选择框:建议先不打开“详细垃圾回收”,如下图所示。
如果未来在运行过程中出现“Out of memory”这样的错误,再在此位置选中该选择框。
在页面底部点击“确定”在出现的页面上点击“保存”更改WAS HeapDump和Core文件的路径:在WAS的运行环境中,可能会因为“Out of memory”之类的异常产生Heap Dump,这会生成很大的HeapDump文件和Core文件,缺省生成在概要文件CISFE的目录下(/usr/IBM/WebSphere/AppServer/profiles/CISFE)。
当出现这种情况时,迅速增长的HeapDump文件和Core文件有可能会把/usr文件系统占满,为了避免这种情况的发生,我们需要修改该缺省目录到共享盘阵上。
Web容器线程池:选择“服务器> 应用程序服务器> server1 > 线程池”:在如下页面上,点击“WebContainer”:在如下页面上,确认“最小大小”值为默认的“10”,更改“最大大小”值为“100”:修改数据源连接池大小选择“资源> JDBC > 数据源”,并在右边页面上确认作用域是“……服务器=server1”级别,如下图所示。
JVM参数配置及详解-Xms-Xmx-Xmn-Xss调优总结
JVM参数配置及详解-Xms-Xmx-Xmn-Xss调优总结堆⼤⼩设置JVM 中最⼤堆⼤⼩有三⽅⾯限制: ①、相关操作系统的数据模型(32-bt还是64-bit)限制; ②、系统的可⽤虚拟内存限制; ③、系统的可⽤物理内存限制. 32位系统下,⼀般限制在1.5G~2G;64为操作系统对内存⽆限制.在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最⼤可设置为1478m. 堆内存逻辑上分为三部分:新⽣区+养⽼区+永久代 物理上分为两部分:新⽣+养⽼ Jdk1.7之前,有永久代,但已经逐步“去永久代” Jdk1.8之后,⽆永久代,由元空间替代典型设置:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k①、-Xmx3550m:设置JVM最⼤可⽤内存为3550M.②、-Xms3550m:设置JVM促使内存为3550m.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存.③、-Xmn2g:设置年轻代⼤⼩为2G.整个堆⼤⼩=年轻代⼤⼩ + 年⽼代⼤⼩ + 持久代⼤⼩.持久代⼀般固定⼤⼩为64m,所以增⼤年轻代后,将会减⼩年⽼代⼤⼩.此值对系统性能影响较⼤,Sun官⽅推荐配置为整个堆的3/8.④、-Xss128k:设置每个线程的堆栈⼤⼩.JDK5.0以后每个线程堆栈⼤⼩为1M,以前每个线程堆栈⼤⼩为256K.更具应⽤的线程所需内存⼤⼩进⾏调整.在相同物理内存下,减⼩这个值能⽣成更多的线程.但是操作系统对⼀个进程内的线程数还是有限制的,不能⽆限⽣成,经验值在3000~5000左右.java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0①、-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年⽼代的⽐值(除去持久代).设置为4,则年轻代与年⽼代所占⽐值为1:4,年轻代占整个堆栈的1/5②、-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的⼤⼩⽐值.设置为4,则两个Survivor区与⼀个Eden区的⽐值为2:4,⼀个Survivor 区占整个年轻代的1/6③、-XX:MaxPermSize=16m:设置持久代⼤⼩为16m.④、-XX:MaxTenuringThreshold=0:设置垃圾最⼤年龄.如果设置为0的话,则年轻代对象不经过Survivor区,直接进⼊年⽼代. 对于年⽼代⽐较多的应⽤,可以提⾼效率.如果将此值设置为⼀个较⼤值,则年轻代对象会在Survivor区进⾏多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论.回收器选择JVM给了三种选择:串⾏收集器,并⾏收集器,并发收集器,但是串⾏收集器只适⽤于⼩数据量的情况,所以这⾥的选择主要针对并⾏收集器和并发收集器.默认情况下,JDK5.0以前都是使⽤串⾏收集器,如果想使⽤其他收集器需要在启动时加⼊相应参数.JDK5.0以后,JVM会根据当前系统配置进⾏判断.吞吐量优先的并⾏收集器如上⽂所述,并⾏收集器主要以到达⼀定的吞吐量为⽬标,适⽤于科学技术和后台处理等.典型配置:java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20①、-XX:+UseParallelGC:选择垃圾收集器为并⾏收集器.此配置仅对年轻代有效.即上述配置下,年轻代使⽤并发收集,⽽年⽼代仍旧使⽤串⾏收集.②、-XX:ParallelGCThreads=20:配置并⾏收集器的线程数,即:同时多少个线程⼀起进⾏垃圾回收.此值最好配置与处理器数⽬相等.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC①、-XX:+UseParallelOldGC:配置年⽼代垃圾收集⽅式为并⾏收集.JDK6.0⽀持对年⽼代并⾏收集.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100①、-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果⽆法满⾜此时间,JVM会⾃动调整年轻代⼤⼩,以满⾜此值.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy①、-XX:+UseAdaptiveSizePolicy:设置此选项后,并⾏收集器会⾃动选择年轻代区⼤⼩和相应的Survivor区⽐例,以达到⽬标系统规定的最低相应时间或者收集频率等,此值建议使⽤并⾏收集器时,⼀直打开.响应时间优先的并发收集器如上⽂所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间.适⽤于应⽤服务器,电信领域等.典型配置:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC①、-XX:+UseConcMarkSweepGC:设置年⽼代为并发收集.测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明.所以,此时年轻代⼤⼩最好⽤-Xmn设置.②、-XX:+UseParNewGC:设置年轻代为并⾏收集.可与CMS收集同时使⽤.JDK5.0以上,JVM会根据系统配置⾃⾏设置,所以⽆需再设置此值.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection①、-XX:CMSFullGCsBeforeCompaction=5:由于并发收集器不对内存空间进⾏压缩,整理,所以运⾏⼀段时间以后会产⽣"碎⽚",使得运⾏效率降低.此值设置运⾏多少次GC以后对内存空间进⾏压缩,整理.②、-XX:+UseCMSCompactAtFullCollection:打开对年⽼代的压缩.可能会影响性能,但是可以消除碎⽚辅助信息JVM提供了⼤量命令⾏参数,打印信息,供调试使⽤.主要有以下⼀些:-XX:+PrintGC输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs][Full GC 121376K->10414K(130112K), 0.0650971 secs]-XX:+PrintGCDetails输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs][GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上⾯两个混合使⽤输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执⾏时间.可与上⾯混合使⽤输出形式:Application time: 0.5291524 seconds-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间.可与上⾯混合使⽤输出形式:Total time for which application threads were stopped: 0.0468229 seconds-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息输出形式:34.702: [GC {Heap before gc invocations=7:def new generation total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000)eden space 49152K, 99% used [0x1ebd0000, 0x21bce430, 0x21bd0000)from space 6144K, 55% used [0x221d0000, 0x22527e10, 0x227d0000)to space 6144K, 0% used [0x21bd0000, 0x21bd0000, 0x221d0000)tenured generation total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)the space 69632K, 3% used [0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000)compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)34.735: [DefNew: 52568K->3433K(55296K), 0.0072126 secs] 55264K->6615K(124928K)Heap after gc invocations=8:def new generation total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000)eden space 49152K, 0% used [0x1ebd0000, 0x1ebd0000, 0x21bd0000)from space 6144K, 55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000)to space 6144K, 0% used [0x221d0000, 0x221d0000, 0x227d0000)tenured generation total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000)the space 69632K, 4% used [0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000)compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)}, 0.0757599 secs]-Xloggc:filename:与上⾯⼏个配合使⽤,把相关⽇志信息记录到⽂件以便分析.常见配置汇总堆设置-Xms:初始堆⼤⼩-Xmx:最⼤堆⼤⼩-XX:NewSize=n:设置年轻代⼤⼩-XX:NewRatio=n:设置年轻代和年⽼代的⽐值.如:为3,表⽰年轻代与年⽼代⽐值为1:3,年轻代占整个年轻代年⽼代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的⽐值.注意Survivor区有两个.如:3,表⽰Eden:Survivor=3:2,⼀个Survivor区占整个年轻代的1/5-XX:MaxPermSize=n:设置持久代⼤⼩收集器设置-XX:+UseSerialGC:设置串⾏收集器-XX:+UseParallelGC:设置并⾏收集器-XX:+UseParalledlOldGC:设置并⾏年⽼代收集器-XX:+UseConcMarkSweepGC:设置并发收集器垃圾回收统计信息-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xloggc:filename并⾏收集器设置-XX:ParallelGCThreads=n:设置并⾏收集器收集时使⽤的CPU数.并⾏收集线程数.-XX:MaxGCPauseMillis=n:设置并⾏收集最⼤暂停时间-XX:GCTimeRatio=n:设置垃圾回收时间占程序运⾏时间的百分⽐.公式为1/(1+n)并发收集器设置-XX:+CMSIncrementalMode:设置为增量模式.适⽤于单CPU情况.-XX:ParallelGCThreads=n:设置并发收集器年轻代收集⽅式为并⾏收集时,使⽤的CPU数.并⾏收集线程数.调优总结年轻代⼤⼩选择响应时间优先的应⽤:尽可能设⼤,直到接近系统的最低响应时间限制(根据实际情况选择).在此种情况下,年轻代收集发⽣的频率也是最⼩的.同时,减少到达年⽼代的对象.吞吐量优先的应⽤:尽可能的设置⼤,可能到达Gbit的程度.因为对响应时间没有要求,垃圾收集可以并⾏进⾏,⼀般适合8CPU以上的应⽤.年⽼代⼤⼩选择响应时间优先的应⽤:年⽼代使⽤并发收集器,所以其⼤⼩需要⼩⼼设置,⼀般要考虑并发会话率和会话持续时间等⼀些参数.如果堆设置⼩了,可以会造成内存碎⽚,⾼回收频率以及应⽤暂停⽽使⽤传统的标记清除⽅式;如果堆⼤了,则需要较长的收集时间.最优化的⽅案,⼀般需要参考以下数据获得:并发垃圾收集信息持久代并发收集次数传统GC信息花在年轻代和年⽼代回收上的时间⽐例减少年轻代和年⽼代花费的时间,⼀般会提⾼应⽤的效率吞吐量优先的应⽤:⼀般吞吐量优先的应⽤都有⼀个很⼤的年轻代和⼀个较⼩的年⽼代.原因是,这样可以尽可能回收掉⼤部分短期对象,减少中期的对象,⽽年⽼代尽存放长期存活对象.较⼩堆引起的碎⽚问题因为年⽼代的并发收集器使⽤标记,清除算法,所以不会对堆进⾏压缩.当收集器回收时,他会把相邻的空间进⾏合并,这样可以分配给较⼤的对象.但是,当堆空间较⼩时,运⾏⼀段时间以后,就会出现"碎⽚",如果并发收集器找不到⾜够的空间,那么并发收集器将会停⽌,然后使⽤传统的标记,清除⽅式进⾏回收.如果出现"碎⽚",可能需要进⾏如下配置:-XX:+UseCMSCompactAtFullCollection:使⽤并发收集器时,开启对年⽼代的压缩.-XX:CMSFullGCsBeforeCompaction=0:上⾯配置开启的情况下,这⾥设置多少次Full GC后,对年⽼代进⾏压缩在同⼀个⼯程下,有两个类,这两个类中只有很少的变动,⽽最关健的FOR却没有⼀点变动,可是当我分别运⾏这两个程序的时候却出现⼀个很严重的问题,⼀个程序循环的快,⼀个循环的慢.这到底是怎么回事呢~苦苦寻找了半天也没有想到是为什么,因为程序改变的部分根不影响我循环的速度,可是结果却是有很⼤的差别,⼀个⼤约是在⼀分钟这内就可以循环完,可是另⼀个却需要六七分钟,这根本就不是⼀个数据理级的⿇.两个完全⼀样的循环,从代码上根本上是看不出有什么问题.不得以求助同事吧,可是同事看了也感觉很诡异,两个⼈在那订着代码⼜看了⼀个多⼩时,最后同事让我来个⼲净点的,关机重启.我到也听话,就顺着同事的意思去了,可就在关机的这个时候他突然说是不是内存的问题,我也空然想到了,还真的有可能是内存的问题,因为快的那个在我之前运⾏程序之前可给过1G的内存啊,⽽后来的这个我好像是没有设过内存啊,机器起来了,有了这个想法进去看看吧,结果正中要害,果真是慢的那个没有开内存,程序运⾏时只不过是JVM默认开的内存.我初步分析是因为内存太⼩,⽽我的程序所⽤内存⼜正好卡在JVM所开内存边上,不⾄于溢出.当程序运⾏时就得花费⼤部分时间去调⽤GC去,这样就导致了为什么相同的循环出现两种不同的效率~!内存使⽤情况的⽅法:public static String getMemUsage() {long free = ng.Runtime.getRuntime().freeMemory();long total = ng.Runtime.getRuntime().totalMemory();StringBuffer buf = new StringBuffer();buf.append("[Mem: used ").append((total-free)>>20).append("M free ").append(free>>20).append("M total ").append(total>>20).append("M]");return buf.toString();}google⼀下,⼤概就说JVM是这样来操作内存:堆(Heap)和⾮堆(Non-heap)内存 按照官⽅的说法:"Java 虚拟机具有⼀个堆,堆是运⾏时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为⾮堆内存(Non-heap memory)".可以看出JVM主要管理两种类型的内存:堆和⾮堆.简单来说堆就是Java代码可及的内存,是留给开发⼈员使⽤的;⾮堆就是JVM留给⾃⼰⽤的,所以⽅法区,JVM内部处理或优化所需的内存(如JIT编译后的代码缓存),每个类结构(如运⾏时常数池,字段和⽅法数据)以及⽅法和构造⽅法的代码都在⾮堆内存中.堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最⼤分配的内存由-Xmx指定,默认是物理内存的1/4.默认空余堆内存⼩于40%时,JVM就会增⼤堆直到-Xmx的最⼤限制;空余堆内存⼤于70%时, JVM会减少堆直到-Xms的最⼩限制.因此服务器⼀般设置-Xms,-Xmx相等以避免在每次GC 后调整堆的⼤⼩.⾮堆内存分配 JVM使⽤-XX:PermSize设置⾮堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最⼤⾮堆内存的⼤⼩,默认是物理内存的1/4. JVM内存限制(最⼤值) ⾸先JVM内存⾸先受限于实际的最⼤物理内存,假设物理内存⽆限⼤的话,JVM内存的最⼤值跟操作系统有很⼤的关系.简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给⼀个限制,这个限制⼀般是 2GB-3GB(⼀般来说Windows系统下为1.5G-2G,Linux 系统下为2G-3G),⽽64bit以上的处理器就不会有限制了JVM内存的调优1. Heap设定与垃圾回收Java Heap分为3个区,Young,Old和Permanent.Young保存刚实例化的对象.当该区被填满时,GC会将对象移到Old 区.Permanent区则负责保存反射对象,本⽂不讨论该区.JVM的Heap分配可以使⽤-X参数设定,-Xms:初始Heap⼤⼩-Xmx:java heap最⼤值-Xmn:young generation的heap⼤⼩/年轻代的⼤⼩2.JVM有2个GC线程 第⼀个线程负责回收Heap的Young区. 第⼆个线程在Heap不⾜时,遍历Heap,将Young 区升级为Older区.Older区的⼤⼩等于-Xmx减去-Xmn,不能将-Xms的值设的过⼤,因为第⼆个线程被迫运⾏会降低JVM的性能.3.为什么⼀些程序频繁发⽣GC?有如下原因: l 程序内调⽤了System.gc()或Runtime.gc(). l ⼀些中间件软件调⽤⾃⼰的GC⽅法,此时需要设置参数禁⽌这些GC. l Java的Heap太⼩,⼀般默认的Heap值都很⼩. l 频繁实例化对象,Release对象.此时尽量保存并重⽤对象,例如使⽤StringBuffer()和String(). 如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表⽰你的Heap处于健康状态.许多Server端的Java程序每次GC后最好能有65%的剩余空间.经验之谈:注意: 1.Server端JVM最好将-Xms和-Xmx设为相同值.为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2]. 2.⼀个GUI程序最好是每10到20秒间运⾏⼀次GC,每次在半秒之内完成[2].注意: 1.增加Heap的⼤⼩虽然会降低GC的频率,但也增加了每次GC的时间.并且GC运⾏时,所有的⽤户线程将暂停,也就是GC期间,Java应⽤程序不做任何⼯作. 2.Heap⼤⼩并不决定进程的内存使⽤量.进程的内存使⽤量要⼤于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack 等. 3.Stack的设定 每个线程都有他⾃⼰的Stack.-Xss 每个线程的Stack⼤⼩,Stack的⼤⼩限制着线程的数量.如果Stack过⼤就好导致内存溢漏.-Xss参数决定Stack⼤⼩,例如-Xss1024K.如果Stack太⼩,也会导致Stack溢漏.4.硬件环境 硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量. 如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC.这种情况你可以增加机器的内存,来减少Swap空间的使⽤[2].5.4种GC 第⼀种为单线程GC,也是默认的GC.,该GC适⽤于单CPU机器. 第⼆种为Throughput GC,是多线程的GC,适⽤于多CPU,使⽤⼤量线程的程序.第⼆种GC与第⼀种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第⼀种⼀样,仍然采⽤单线程.-XX:+UseParallelGC参数启动该GC. 第三种为Concurrent Low Pause GC,类似于第⼀种,适⽤于多CPU,并要求缩短因GC造成程序停滞的时间.这种GC可以在Old区的回收同时,运⾏应⽤程序.-XX:+UseConcMarkSweepGC参数启动该GC. 第四种为Incremental Low Pause GC,适⽤于要求缩短因GC造成程序停滞的时间.这种GC可以在Young区回收的同时,回收⼀部分Old区对象.-Xincgc参数启动该GC.6. GC如何运作? 分代收集,在新⽣代区频繁发⽣,在⽼年区较少发⽣,永久区基本不发⽣7.GC的四⼤算法 1、复制算法 效率⾼,不会产⽣内存碎⽚,但需要双倍空间,在新⽣代区中使⽤ 2、标记清除算法 ⽆需双倍空间,但会产⽣内存碎⽚,但需要进⾏两次扫描,在⽼年代区中使⽤ 3.标记压缩算法 ⽆需双倍空间,不会产⽣内存碎⽚,但移动对象需要时间,在⽼年代中使⽤ 4.标记清除压缩算法。
jvm标准参数
jvm标准参数JVM标准参数JVM(Java Virtual Machine)是一种虚拟机,它是Java程序的执行环境。
在JVM中,有很多参数可以设置,这些参数可以通过命令行或者配置文件来设置。
这篇文章将详细介绍JVM标准参数。
一、概述JVM标准参数分为两类:通用参数和非通用参数。
通用参数适用于所有的JVM实现,而非通用参数只适用于某些特定的实现。
二、通用参数1. -Xms-Xms是指JVM启动时堆内存的最小值。
例如,-Xms512m表示JVM启动时堆内存的最小值为512MB。
2. -Xmx-Xmx是指JVM启动时堆内存的最大值。
例如,-Xmx1024m表示JVM启动时堆内存的最大值为1GB。
3. -Xmn-Xmn是指新生代的大小。
新生代是指在垃圾收集中被划分为年轻代和幸存区的内存区域。
例如,-Xmn256m表示新生代大小为256MB。
4. -XX:PermSize-XX:PermSize是指永久代(Permanent Generation)大小。
永久代是一种特殊的内存区域,它主要用于存放类信息、常量池等数据。
例如,-XX:PermSize=64m表示永久代大小为64MB。
5. -XX:MaxPermSize-XX:MaxPermSize是指永久代的最大值。
例如,-XX:MaxPermSize=128m表示永久代的最大值为128MB。
6. -Xss-Xss是指每个线程的堆栈大小。
例如,-Xss256k表示每个线程的堆栈大小为256KB。
7. -XX:+UseParallelGC-XX:+UseParallelGC是指使用并行垃圾收集器。
并行垃圾收集器可以在多个CPU上同时进行垃圾收集,从而提高垃圾收集效率。
8. -XX:+UseConcMarkSweepGC-XX:+UseConcMarkSweepGC是指使用CMS(Concurrent Mark Sweep)垃圾收集器。
CMS垃圾收集器可以在应用程序运行时进行垃圾回收,从而减少应用程序停顿时间。
BS系统安装部署培训教材(精品PPT)
Profile
Server1
Server2 Managed
Node Agent
负载权重 负载权重
Node Agent
Cluster
第十七页,共四十五页。
IMB DB2
10.188.182.240
profileName: AppSrv01 nodeName: aix240nodeName01
Node
第二十一页,共四十五页。
.21.
二、产品化BS系统(xìtǒng)数据库规划
实例(shílì)级参数调整参考:
参数名
中文名
数据库管理器配置
ASLHEAPSZ
应用程序支持层堆大小
SHEAPTHRES
排序堆阈值
MAXAGENTS
代理程序的最大数目
NUM_POOLAGENTS 代理程序池大小
2GMEM 2CPU
CELL CELL CELL_SPACE 10G
INDEX_SPACE 5G
DCCE DCCELL DCCELL_SPAC 10G
LL
E
DCINDEX_SPA 5G CE
第二十页,共四十五页。
ICSS ResourceOne V4 产品 (包括DEI等)数据库(平台 库) 存放各业务组件数据库表, 表名通过表名前缀区分不同 的业务(业务库)
数据中心主题数据分析、报 表查询数据库(查询库)
.20.
二、产品化BS系统(xìtǒng)数据库规划
脚本执行: 执行各发行包中“/db/db2/〞目录下的脚本,创立数据库对象,执行顺序为: 建表、建索引、建视图、插入(chā rù)初始化数据……
备注:
RONE的脚本请在 RONE用户登录后执行;
Websphere配置说明_9.27
配置说明说明:本配置文件为解决Websphere配置说明,附件中是050927版本web.war包。
1、连接IBM得Websphere控制台;例如:http://10.52.153.28:9060/ibm/console2、以任意用户名登录;3、路径:资源/JDBC提供者,此处可以新建JDBC。
其中必添项如下:选择数据库类型:Oracle选择提供者类型:Oracle JDBC Driver选择实现类型:连接池数据源名称:Oracle JDBC Driver(可以改变)类路径:%ORACLE_HOME%:/ora92/jdbc/lib/ojdbc14.jar(ojdbc14.jar路径)实现类名:oracle.jdbc.pool.OracleConnectionPoolDataSource(为系统默认,不用改变)点击确定或者应用才可以继续4、在JDBC提供者列表中,点击刚才新建得JDBC(Oracle JDBC Driver)。
在页面得右侧其他属性一栏,点击数据源其中必添项如下:名称:OracleDS(可以改变)JNDI名称:jdbc/OracleDS(不可以改变)URL: jdbc:oracle:thin:@10.52.153.28:1521:ora9i点击确定或者应用才可以继续5、在数据源列表中点击刚刚新建得数据源(OracleDS)。
在右侧得其他属性列表中点击定制属性添加2项如下:点击新建名称:user值:ipos_cc点击确定或者应用才可以继续点击新建名称:password值:sysmanager点击确定或者应用才可以继续6、点击保存才可以继续7、此时,配置完成。
可以测试连接注:每次重新配置数据源时,应该重新WebShpere常见问题:1、具有JNDI 名称jdbc/Oracle JDBC Driver DataSource 的资源已存在。
您必须使用唯一的名称。
解决:此时数据源中URL与其他数据源中URL重复。
jvm常用调优参数
jvm常用调优参数
JVM是JavaVirtualMachine的缩写,是Java程序运行的核心。
JVM的调优是优化Java应用程序性能的重要一环,其中调优参数的合理设置是关键。
以下是常用的JVM调优参数:
1. -Xms:设置JVM的初始内存大小,默认为物理内存的
1/64。
2. -Xmx:设置JVM的最大内存大小,超出该内存大小后会触发垃圾回收。
3. -Xmn:设置年轻代的大小,一般设置为总内存的1/3或
1/4。
4. -XX:SurvivorRatio:设置年轻代中Eden区和Survivor区的比例,默认值为8。
5. -XX:NewRatio:设置新生代和老年代的比例,默认值为2。
6. -XX:MaxPermSize:设置永久代的大小,一般设置为
256MB。
7. -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器,可以减少内存抖动。
8. -XX:+UseParallelGC:使用并行垃圾回收器,可提高垃圾回收效率。
9. -XX:+HeapDumpOnOutOfMemoryError:当JVM内存溢出时,生成堆转储文件。
10. -XX:+PrintGCDetails:打印垃圾回收的详细信息。
以上是常用的JVM调优参数,通过合理地设置参数,可以优化Java应用程序的性能。
java jvm参数配置方法
一、概述在Java编程中,JVM(Java虚拟机)参数配置是非常重要的一环,它能够对Java应用程序的性能和行为产生重大影响。
通过合理配置JVM 参数,可以提高Java应用程序的运行效率和稳定性,从而更好地满足需求。
本文将介绍Java JVM参数配置的方法,包括常用的参数选项和配置方式。
二、参数类型JVM参数可以分为两类:标准参数和非标准参数。
标准参数是被所有的JVM实现所支持的参数,用于控制JVM的运行方式,例如内存大小、垃圾回收器的选择等。
非标准参数则是被某个特定的JVM实现所支持的参数,通常用于调试和诊断。
三、常用的标准参数1. -Xms和-Xmx:分别用于指定JVM的初始内存和最大内存。
-Xms512m表示JVM启动时分配的初始内存为512MB,-Xmx1024m表示JVM分配的最大内存为1GB。
2. -XX:NewSize和-XX:MaxNewSize:用于指定新生代内存的初始大小和最大大小。
3. -XX:PermSize和-XX:MaxPermSize:用于指定永久代内存的初始大小和最大大小(仅适用于JDK1.7以前的版本,JDK1.8之后永久代已被元空间(Metaspace)取代)。
4. -XX:+UseParallelGC:启用并行垃圾回收器。
5. -XX:+UseConcMarkSweepGC:启用CMS垃圾回收器。
四、配置方式1. 命令行参数配置:可以通过在启动Java应用程序时添加参数来配置JVM参数。
例如:java -Xms512m -Xmx1024m -jar myapp.jar2. 环境变量配置:可以通过设置环境变量来配置JVM参数。
在Windows系统中,可以在系统属性中设置JAVA_OPTS环境变量,然后在该环境变量中添加JVM参数。
3. 配置文件配置:可以在JVM的配置文件中(如jvm.options、java.conf等)添加相应的参数配置。
这种方式适用于需要频繁修改参数的情况。
JVM知识(四):GC配置参数
JVM知识(四):GC配置参数 JVM配置参数分为三类参数:跟踪参数、堆分配参数、栈分配参数 这三类参数分别⽤于跟踪监控JVM状态,分配堆内存以及分配栈内存。
跟踪参数 跟踪参数⽤户跟踪监控JVM,往往被开发⼈员⽤于JVM调优以及故障排查。
1、当发⽣GC时,打印GC简要信息 使⽤-XX:+PrintGC或-verbose:gc参数 这两个配置参数效果是⼀样的,都是在发⽣GC时打印出简要的信息,例如:public static void main(String[] args) {byte[] bytes =null;for(int i=0;i<100;i++){bytes = new byte[1 * 1024 * 1024];}}这个程序连续创建了100个1M的数组对象,使⽤-XX:+PrintGC或-verbose:gc参数执⾏该程序,即可查看到GC情况: 1: [GC (Allocation Failure) 32686K->1648K(123904K), 0.0007230 secs] 2: [GC (Allocation Failure) 34034K->1600K(123904K), 0.0009652 secs] 3: [GC (Allocation Failure) 33980K->1632K(123904K), 0.0005306 secs]我们可以看到程序执⾏了3次GC(minor GC),这三次GC都是新⽣代的GC,(新⽣代GC的解释)因为这个程序每次创建新的数组对象,都会把新的对象赋给bytes变量,⽽⽼的对象没有任意对象引⽤它,⽼对象会变的不可达,这些不可达的⽼对象在新⽣代minor GC时候被回收掉。
总结新⽣代GC:新⽣代GC回收⼀些不可达(没有任意对象引⽤)的⽼对象32686K表⽰回收前,对象占⽤空间。
1648K表⽰回收后,对象占⽤空间。
123904K表⽰还有多少空间可⽤。
websphere性能设置和日常维护
websphere性能设置和日常维护一、确认磁盘空间是否满足要求1、 WebSphere 应用服务器自身代码的占用空间。
这个空间一般在1G左右,在不同的系统平台上略有差异。
2、概要文件所占的空间。
WebSphere应用服务器V6.1创建的概要文件基本类型有3种,每个概要文件所占用的空间如下:应用程序服务器(Application Server):在WebSphere应用服务器安装没有选择安装样本程序时,这一概要文件所占磁盘空间约为200M;Deployment Manager:30M;定制概要文件(Custom,即node agent):10M。
3、如果要安装WEB服务器,则在WEB服务器所在服务器上要预留WEB服务器所占的磁盘空间。
IBM HTTP服务器一般占用110M左右的空间。
4、如果安装WEB服务器,则在WEB服务器所在机器上通常也要安装Web Server Plug-in组件,该组件所占磁盘空间约为200M。
5、 WebSphere 应用服务器系统日志的占用空间。
日志空间的估算要结合系统对日志的配置情况。
WebSphere应用服务器的主要日志有SystemOut.log,SystemErr.log。
我们可设置日志文件的大小和保存的历史日志文件数量,从而可以估算出其需要的空间。
6、如果有WEB服务器,需考虑WEB服务器的日志空间。
如果客户开启了WEB服务器的访问日志access.log(默认开启),此日志增长的速度极快,要预留足够的空间。
7、备份文件需要的空间。
WebSphere应用服务器提供了一个备份命令(backupConfig.bat/sh),用来备份应用服务器的配置及其上应用。
我们建议在系统稳定之后及时备份。
对于一个典型生产系统,WebSphere应用服务器这个配置文件经常超过100M。
可在发出backupConfig命令时,使用-logfile参数指定该备份文件的存放位置。
8、系统出错时日志,例如,JVM在发生OutOfMemory时,在大多数平台上WebSphere 应用服务器会默认写javacore文件和heapdump文件,记录错误出现时的JVM Heap、线程情况,以备错误诊断使用。
WebSphere集群安装与配置手册-
【文档说明】本文档在文档《ZTSJ-HQ-JSKF-SSD-应用部署-管道-Datastage安装文档》基础上做了一些修改,保留了WebSphere安装及配置部分内容。
对本文档描述的操作方法在测试环境中进行了验证。
本文档的图片部分来自于实际的测试环境,其余沿用了原始文档。
1 安装规划 1.1 目录规划1.2 安装前准备检查操作系统账户wasadm,若果没有,需要创建创建用户组和用户groupadd -g 901 glogreaduseradd -u 901 -g glogreadulogread passwdulogreadecho mybasis0|passwd wasadm --stdin 在集群各个机器上创建目录并赋权 mkdir -p /opt/IBM/WebSphere mkdir -p /opt/IBM/HTTPServer修改主机名,修改/etc/sysconfig/network 文件: vi /etc/sysconfig/network 修改/etc/hosts 文件: vi /etc/hosts系统参数修改 vim /etc/sysctl.conf 添加后执行 sysctl -p 使之生效kernel.sem = 250 128000 32 1024查看所有集群机器的时间同步配置情况,添加时间服务器 vim /etc/ntp.conf server 10.33.144.18 iburst server 10.33.144.19 iburst并检查ntpd 服务是否启动..按照如下命令启动ntpd 时间同步 chkconfigntpd onservice ntpd restart检查防火墙情况,或者直接执行以下命令,停止防火墙chkconfigiptables offservice iptables stop检查Selinux:getenforce如果不是disabled,建议修改,命令如下:vi /etc/sysconfig/selinux修改如右图红框中的内容为disabled如果无法连接图形界面,解决方式如下:vi /etc/ssh/sshd_configX11Forwarding yesUseLogin no重新启动服务器2安装WebSphere如果想看到中文界面,请输入:export LANG=zh_CN.UTF-82.1安装InstallationManager(集群两台都要装)(单机要装)解压InstalMgr1.6.2_LNX_X86_64_WAS_8.5.5.tar在DMGR机器切换到InstallationManager介质目录执行install开始安装勾选Next接受LicenseNext/opt/IBM/InstallationManager/eclipse nextnext安装进行中关闭2.2安装WebSphere(集群两台都要装)(单机要装)在DMGR机器启动installationManager路径:/opt/IBM/InstallationManager/eclipse命令:./launcher按照如图选择按照如图选择按照路径选择,具体路径见下图路径信息ok选择install勾选Next接受license Next/opt/IBM/IMSharednext/opt/IBM/WebSphere/AppServer next选择中文支持nextNextInstall安装进行中Finish2.3安装WebSphere 补丁(两台都要装)(单机要装)在DMGR机器启动installationManager按照图选择ok路径信息ok不要勾选Next此处选择Next会出现输入IBM网站的登录信息。
2024版IBM官方Websphere中文使用教程
用教程目录•Websphere概述与安装•Websphere核心组件详解•Websphere应用开发实践•Websphere集群与负载均衡技术•Websphere安全性管理策略•Websphere性能调优与监控技巧Websphere概述与安装Websphere简介基于开放标准WebSphere支持Java EE、OSGi、Web服务和其他重要标准,使开发人员能够利用广泛的选择来构建和部署应用程序。
跨平台支持WebSphere可以在多种操作系统上运行,包括Windows、Linux和UNIX等,从而提供了灵活的部署选项。
高可用性WebSphere提供了集群和故障转移功能,以确保关键应用程序的高可用性和可靠性。
安全性WebSphere提供了强大的安全性功能,包括身份验证、授权、加密和安全性管理,以保护应用程序和数据免受攻击。
Websphere功能特点安装Websphere前提条件01确保您的计算机满足WebSphere的系统要求,包括适当的硬件和操作系统。
02确保您具有适当的权限来安装和配置WebSphere。
03确保您的计算机上已经安装了Java DevelopmentKit(JDK)。
安装步骤与配置下载WebSphere安装程序您可以从IBM官方网站下载WebSphere安装程序。
运行安装程序双击安装程序以启动安装向导,并按照提示进行安装。
配置WebSphere在安装过程中,您需要配置WebSphere的一些参数,如端口号、管理员用户名和密码等。
启动WebSphere完成安装和配置后,您可以启动WebSphere并访问管理控制台来管理您的应用程序。
Websphere核心组件详解应用服务器WebSphere Application Serv…提供全面的Java EE应用服务器功能,支持大规模的企业级应用部署和管理。
Liberty Profile轻量级、高度可配置的Java EE应用服务器,适用于云和移动应用。
WebSphere常见故障报错
Websphere常见报错故障报错1、数据源测试连接报错-4461例如:解决办法:j2c认证未配置用户或密码导致,配置j2c认证的用户及密码并重启中间件后生效。
报错2、数据源测试连接报错-1762例如解决办法:检查数据库环境,很有可能是数据库空间不足导致,增大空间即可。
报错3:创建节点8879端口报错例如:解决办法:检查服务器是否配置了hosts报错4:nodeagent启动失败例如:解决办法:检查节点是否已经添加到单元中或管理节点未启动。
报错5:数据源连接报错-4228解决办法:检查中间件服务器磁盘空间及数据库所在服务器的磁盘空间,空间满导致无法启动。
报错6、websphere控制台卡控制台页面非常卡,速度缓慢,刷不出来解决办法:修改dmgr控制台的jvm内存即可。
报错7:控制台登录密码错误解决办法:把概要文件Dmgr01下的config目录下的security.xml中的enable=true,改为false,然后ps -ef|grep dmgr,找到dmgr的进程号,kill -9 进程号,再去重启dmgr;dmgr起来后,控制台就不需要密码了;报错8:发布程序报错,提示配置库中已存在应用程序例如:解决办法:1、删除 $WAS_HOME/profiles/App1/config/cells/...cell/applications下对应的文件夹2、删除 $WAS_HOME/profiles/App1/installedApps/...cell下对应的文件夹如有还有问题,请重启websphere。
强行的方法,查找相关全部删除find . -name '项目名*'|xargs rm -rf比如 find . -name 'qhd01*'|xargs rm -rf报错9:WASX7209I: Connected to process "dmgr" on node ascserver1CellManager01 using SOAP connector; The type of process is: DeploymentManagerWASX7017E: Exception received while running file "/tmp/was.conf.1311.py"; exception information:mandValidationException: ADMG9249E: Exception caught validating the memberConfig step of the createClusterMember task command:mandValidationException: ADMG9218E: Cannot find node ascserver2Node01.WASX7341W: No "save" was performed before the interactive scripting session exited; configuration changes will not be saved.解决办法:检查两台机器时间,时间差距大会导致此报错。
WebSpere中监视JVM (WebSphere PMI设置和TPV使用)
5、
在“其他属性”下,单击java虚拟机。
如下图:
6、
根据实际需要设置初始堆大小和最大堆大小即可。
7、
单击应用 –〉单击保存 –〉重启该was应用服务器即可。
注意:(1)在实际应用配置中32位系统JVM HEAP最大不能超过1.2G。
1、
PMI的配置:
默认情形下(默认级别Default),已开启PMI。
配置如下:
(1)
was控制台-〉监视和调整 –〉性能监视基础结构(PMI)
(2)
择所要配置的服务器名。
(3)
配置选项卡,可根据监控内容的需要来选择PMI的任一种统计信息集(无,基本,扩展,全部,定制)这里选择"定制"。
WebSpere中监视JVM (WebSphere PMI设置和TPV使用) ห้องสมุดไป่ตู้
WebSphere中JAVA虚拟机(JVM)的设置
设置步骤:
1、
登陆was控制台。
2、
在控制台中单击服务器 -> 应用程序服务器
3、
单击需要配置的应用服务器。
4、
在“服务器基础结构”下,单击java和进程管理 –〉进程定义
如下图:从整体趋势,可看出已使用内存一直在增长(表示已使用的内存红色曲线), TPV可以帮助发现内存泄漏,为了得到最优结果,可重复试验,而且每次可以增加测试的时间,例如测试1000或2000个页面请求。
(4)点击定制 -> 在定制监视级别的树中,选择配置选项卡,点开JVM运行时,可根据需要启用或禁用相应的计数器。
(5)保存并重启WebSphere服务器。
2、
jvm参数配置原则
jvm参数配置原则JVM参数配置原则JVM(Java Virtual Machine)是Java程序运行的平台,通过JVM 参数的配置可以对Java应用的性能和行为进行调优。
合理的JVM参数配置能够提升应用的性能和稳定性,因此掌握JVM参数配置原则是非常重要的。
本文将介绍一些常用的JVM参数配置原则,帮助开发人员更好地进行JVM参数的调优。
一、根据应用需求进行内存分配在JVM参数配置中,最重要的参数是-Xmx和-Xms,它们用于指定JVM堆内存的最大值和初始值。
合理配置堆内存大小可以避免内存溢出或浪费。
通常情况下,可以将-Xmx设置为物理内存的70%到80%,而-Xms则可以设置为-Xmx的一半。
这样可以保证应用有足够的内存供应,并且避免堆内存的频繁扩容和回收。
二、设置合适的新生代和老年代比例JVM的堆内存主要分为新生代和老年代两部分。
新生代用于存放新创建的对象,而老年代用于存放生命周期较长的对象。
通过参数-XX:NewRatio可以设置新生代和老年代的比例。
一般情况下,可以将新生代的比例设置为3或4,即新生代占整个堆内存的1/3或1/4。
这样可以保证新生代有足够的空间进行对象的创建和回收。
三、调整垃圾回收算法JVM的垃圾回收算法有很多种,如Serial、Parallel、CMS和G1等。
不同的应用场景可以选择不同的垃圾回收算法以达到最优的性能。
对于较小的应用,可以选择Serial或Parallel垃圾回收算法,它们在单线程和多线程环境下都有良好的性能表现。
对于大型应用,可以选择CMS或G1垃圾回收算法,它们能够在较短时间内完成垃圾回收,减少应用的停顿时间。
四、设置合适的垃圾回收参数除了选择合适的垃圾回收算法外,还需要根据具体应用的特点设置合适的垃圾回收参数。
例如,可以通过参数-XX:MaxGCPauseMillis设置最大垃圾回收停顿时间,以控制垃圾回收对应用的影响。
可以通过参数-XX:ParallelGCThreads设置并行垃圾回收的线程数,以提高垃圾回收的效率。
web中间件之WebSphere日常运维培训资料
5、日志配置
5、日志配置
6、WAS监控
6、WAS监控
注意事项 所有可以监控的参数推荐的初始化和最大
值不要设置成一样,否则不能监控用户压 力对系统的参数影响
如:jvm内存大小、数据库连接池、线程池
7、常见问题
Jvm内存溢出 1)发布环节:非堆、堆 2)运行环节:堆、非堆
Dmgr缓慢 发布应用启动失败 Server启动失败 Node启动失败:主要50~100
4、jvm内存优化
管理端jvm
除此还包括: Nodeagent 内存优化
4、jvm内存优化
4、jvm内存优化
堆1~2G
-Xms512m –Xmx1024m
非堆256~512M
通用jvm参数:-XX:PermSize=256m –XX:MaxPermSize=512m
WAS日常运维
2015-12
目录
1、虚拟主机 2、线程配置 3、数据库连接池配置 4、jvm内存优化 5、日志配置 6、WAS监控 7、常见问题
1、虚拟主机
1、虚拟主机
2、线程池
推荐50~100或100~200
线程和会话的关系
一个URL请求 是一个线程
一个用户登录 系统就是一个 会话 登录人数和 URL请求数量 成正比
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.Websphere JVM相关问题诊断:由JVM引起的Websphere问题主要有应用服务器宕机和性能下降,JVM相关问题的特征如下:(1).Websphere应用服务器停止响应:a.Websphere服务器宕机。
b.Websphere进程挂起。
c.JVM内存溢出。
(2).性能下降:JVM进程号(process Id)不停地改变。
2.诊断JVM相关问题所需文件:(1).核心文件(Core files):a.进程快照或者系统的核心文件。
b.完整的JVM内存快照等。
注意:文件非常庞大,需要ISA(IBM Support Assistant)的日志分析工具解析。
(2).javacore文件:a.正在运行的java进程的快照。
b.Websphere应用服务器发生错误时自动生成的文件。
存储路径为:<WAS_install_root>/profiles/<profile>。
(3).JVM详细的垃圾回收器日志。
(4).JVM堆快照。
3.JVM垃圾回收器日志:(1).设置Websphere中JVM垃圾回收器步骤:在Websphere管理控制窗口点击:Servers->Applicationservers-><server_name>->Java and Process Management ->Process Definition->Java Virtual Machine, 勾选” Verbose Garbage Collection ”复选框,重启Websphere即可。
(2).JVM详细的垃圾回收器日志写在系统错误日志文件中(native_stderr)。
(3).在产品发布以后,推荐将Websphere的JVM垃圾回收器日志打开,它消耗资源非常的少。
4.JVM关于堆的相关参数设置:(1).JVM最大的堆内存大小(maximum heap, -Xmx):设置合理的最大堆有助于JVM优化性能,最大堆越大,JVM垃圾回收器收集一次垃圾花费的时间越长;最大堆越小,JVM垃圾回收器运行很频繁。
合理的最大堆应该是稍微大于当程序运行稳定时所需的最大堆容量。
(2).JVM初始化堆内存大小(minimum heap,-Xms):设置合理的最小堆可以提高Websphere应用服务器的启动时间。
最小堆太小,JVM可能在服务器启动重新过程不断调整重新设置最小堆,从而影响启动速度。
最小堆太大,垃圾回收器需要回收较大的内存空间,容易产生内存碎片。
同时由于初始堆内存太大,分配堆内存花费的时间比较大,程序响应速度慢。
5.JVM垃圾回收器性能指标:垃圾回收器是JVM中引起内存性能瓶颈的主要原因,JVM的垃圾回收器性能指标:(1).吞吐量(Throughput):指JVM没有花费在垃圾回收器上的百分比,即JVM在处理程序运行所花费时间占整个JVM运行时间的百分比。
(2).暂停(Pauses):指JVM垃圾回收器运行时间的百分比,即因为JVM垃圾回收器运行而暂停应用程序处理时间占整个JVM运行时间的百分比。
6.Websphere中JVM垃圾回收器的回收策略(GC policy):(1). –-Xgcpolicy:optthruput让JVM尽可能花最多时间处理应用程序,尽量减少垃圾回收器的运行时间。
(2). –-Xgcpolicy:optavgpause让JVM尽可能多回收垃圾,当不可预知的情况发生时,应用程序响应时间比较快。
(3). –-Xgcpolicy:gencon适合于应用程序需要大量分配堆内存给短存活周期对象的情况,垃圾回收器使用分代复制算法,让垃圾回收器尽快回收已经死亡的年老代对象。
(4). –-Xgcpolicy:subpool适合于应用程序在多个线程中频繁给大对象分配堆内存的情况。
7.通过JVM线程快照诊断进程挂起问题:当怀疑JVM进程挂起时,以下的方法可以帮助诊断JVM进程挂起相关问题:(1).收集JVM线程快照或者JavaCore文件:Websphere默认是打开的,也可以在命令行(linux)中通过”kill -3”向Websphere发送信号产生JVM线程快照和JavaCore相关文件。
(2).当进程挂起时,每个几分钟收集一下JVM线程快照:当进程挂起产生时,需要每个几分钟收集一下JVM线程快照,以帮助分析进程内部的运行情况。
(3).手动或者通过ISA的线程分析器查看JVM线程快照文件:a.检查是否有线程死锁产生。
b.检查所有发送请求后等待响应的线程运行情况。
8. 通过JVM JavaCore文件诊断进程挂起问题:查看javacore文件主要根据线程的运行状态进行相应的问题诊断:(1).线程处于阻塞状态:a.无法访问的资源,或者逻辑错误的线程同步都有可能导致线程被阻塞。
b.死锁也可能导致线程被阻塞。
(2).线程处于运行状态:a.通过多个javacore文件检查方法的调用堆栈。
b.如果一个方法内产生很多线程,有可能方法的循环逻辑有问题。
(3).线程处于等待状态:线程可能因为等待资源被挂起。
9.Websphere中线程挂起诊断:Websphere中包含了探测线程挂起的功能,它不会去杀掉挂起的线程,只会通过以下3种方式通知线程挂起:(1).向JMX监听器发送JMX通知,通过第3方的工具捕获JMX事件处理线程挂起。
(2).通过线程池流量监测系统向PMI客户发送线程挂起通知。
(3).向Websphere的SystemOut.log日志中写线程挂起的消息,格式如下:[4/17/04 11:51:30:243 EST] 2d757854 ThreadMonitor WCWWSR0605W: Thread Servlet.Engine.Transports : 0 has been active for 14,198 milliseconds and may be hung. There are 1 threads in total in the server that may be hung.(4).当之前一个线程被报告为挂起,如果线程又正常运行后,Websphere会向SystemOut.log日志中写线程正常运行的消息,格式如下:[2/17/04 11:51:47:210 EST] 76e0b856 ThreadMonitor W WSVR0606W: Thread Servlet.Engine.Transports : 0 was previously reported to behung but has completed. It was active for approximately 31,166 milliseconds. There are 0 threads in total in the server that still may be hung.(5).Websphere的监控器对于线程挂起的判定和警告处理可以智能调节,即如果前一次产生的线程挂起告警后来证实是正常运行的,则Websphere会相应调整判定条件。
10.Websphere宕机问题症状和常见原因:Websphere宕机时的主要表现为:Websphere进程因为java异常或者操作系统本地信号而终止运行。
Websphere宕机的常见原因:(1).JVM内存溢出异常。
(2).JVM栈溢出。
(3).无法预知的其他异常情况,如磁盘空间不足等。
(4).JVM性能优化失败,如由JIT引起的问题。
(5).Java本地方法调用(JNI)产生错误,或者类库产生问题。
(6).JVM调用本地机器码执行时,产生内存段冲突。
11.Websphere宕机问题诊断:(1).Core文件:a.进程快照和系统的核心文件。
b.二进制格式的完整的虚拟内存快照文件。
注意:core文件可能非常大,另外有些是二进制格式不可读,因此需要使用ISA 的日志分析工具解析。
(2).JavaCore文件:Java的内存快照文件和线程快照文件。
(3).为JVM配置–Xdump 参数:可以指定产生系统快照、java快照和对内存快照。
13.Websphere内存溢出常见原因:内存溢出产生是指JVM没有足够的内存空间为对象分配内存,常见原因如下:(1).JVM的java堆太小。
(2).JVM中内存空间是够用的,但是都是零散的,即没有一块的容量可以符合新产生对象的堆内存需求(在JDK1.4.2及其以前版本中很常见)。
(3).java代码导致的JVM内存泄漏。
(4).机器本身内存不够用。
14.内存溢出问题诊断方法:(1).首先分析javacore文件中内存相关的问题。
a.检查堆内存大小信息。
b.查看内存溢出异常栈。
(2).分析垃圾回收器产生的文件和堆信息:a.检查垃圾回收器的详细日志。
b.查看对内存快照。
15.Websphere内存溢出症状:(1).JVM堆内存经常以恒定的增长速度不停的增长,直到达到最大堆内存值。
(2).JVM堆内存从来没有处于一个稳定的状态。
16.Websphere内存溢出诊断和解决方法:(1).在Websphere管理控制台窗口增大JVM最大堆内存值(Xmx),方法如下:在Websphere管理控制台窗口点击:Servers -> Application Servers -> server-> Java and Process Management -> Process Definition ->Java Virtual Machine -> Maximum heap size。
(2).检查JVM详细的垃圾回收器日志,审查内存分配失败原因:a.找到因为内存溢出引起的内存分配失败。
b.检查被分配堆内存对象的大小。
c.确认JVM的堆内存大小。
d.查看JVM堆内存空闲利用率(JVM堆没有被分配使用总整个JVM堆的百分比)。
(3).检查之前类似的内存分配失败问题:a.如果持续产生内存分配失败的问题,则JVM堆太小,需要增加JVM堆大小。
b.如果是偶尔因为为一个大对象分配内存失败,是个独立的事件,则考虑综合的解决方案。
17.Websphere监控和调整堆内存大小:在Websphere管理控制台窗口点击:Servers -> Application Servers -> server-> Java and Process Management -> Process Definition ->Java Virtual Machine -> Maximum heap size后打开如下界面:根据JVM中使用的堆内存(上图中橘黄色的线),调整JVM最大堆内存值(上图中红色的线),直到JVM中使用的堆内存趋于稳定为止(橘黄色的线趋于平稳),且JVM最大堆内存稍微大于使用的堆内存值(红色的线稍微高雅平稳后橘黄色的线)。