首页 > 代码库 > 基于Linux的WebSphere性能调优与故障诊断
基于Linux的WebSphere性能调优与故障诊断
一、关于was数据源等问题的配置
(1)关于was数据源连接池的最大、最小配置多大合适?怎样去计算?
(2)关于JVM的配置,64位系统,64位WAS,最值小和最大配置多大最优?怎样去计算?
(3)应用服务器线程池,怎么样配置最优? 怎样去计算?
(4)linux上安装was完成后,linux必须配置哪些参数,was性能最优?如果不配置的话,性能影响大吗
jvm1024-3072,jvm,连接池的请参照文档,官方知识库有些文档,可以当做参考。
线程池100-100。
linux最大文件打开数65536,打开core,用户最大进程数65536
这些都是一般情况下调整,具体的还需要结合实际情况,一般情况下,在系统上线之前,会做压力测试,包括并发测试、疲劳测试等等。在做测试的时候,会不断的调整并发量,压力的时长。这个时候根据每次测试时WAS的运行情况、已经压力测试的结果,会进行不断的调整直到一个满意的值。我在压力测试之前一般把PMI打开,级别是基本,然后每个WAS实例内存最小值为2G,最大值为4G,同时打开WAS的verbose gc。数据源最小值设置为10,最大值设置为50。web container设置为200。其他更多的调整,比如Linux的调整,你可以根据WebSphere Application Server Performance Cookbook里面的建议进行调整。由于文件比较大接近10M,你可以到IBM官网直接下载PDF格式的文件:https://publib.boulder.ibm.com/httpserv/cookbook/
每次压力测试以后,根据verbose gc的记录情况,PMI的记录情况,再进行针对性的调整。如果发现不是WAS的问题,还需要与开发人员一块对业务代码进行优化。
参数 | 参数值 | 说明 |
nofiles | 10000 | 允许打开的文件数。打开文件设置的缺省数目 (2000) 通常足以供大多数应用程序使用。如果对此参数设置的值太小,在打开文件或建立连接时就可能会出错。由于此值限制服务器进程可打开的文件描述符数(软限制)。 |
Nofiles_hard | 10000 | 允许打开的文件数。打开文件设置的缺省数目 (2000) 通常足以供大多数应用程序使用。如果对此参数设置的值太小,在打开文件或建立连接时就可能会出错。由于此值限制服务器进程可打开的文件描述符数(硬限制)。 |
TCP_KEEPALIVE_INTERVAL | 15 | 当探测没有确认时,重新发送探测的频度。缺省是75秒。推荐设置为15. |
TCP_KEEPALIVE_PROBES | 5 | 在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应 推荐设置为5. |
netdev_max_backlog
somaxconn | 3000
3000
| 当由于入局连接请求比率过高而导致连接故障时,更改下列参数: echo 3000 > /proc/sys/net/core/netdev_max_backlog
echo 3000 > /proc/sys/net/core/somaxconn |
二、JVM大小的优化
1、GC日志是设置JVM大小时,最好的参考
2、我看到的很多生产环境GC都是开启的,如果追求极限性能肯定关闭了好
3、session复制是否打开与业务要求相关,性能是是确保业务正常的前提下再考虑的问题
这个考虑的因素很多,比如,并发用户数,你的应用是不是吃大内存型的?比如要生成大的报表,要返回大的数据库结果集。
通常可以以压力测试来预估一个大致的值,然后再慢慢进行调整。
三、WAS7.0集群某节点假死
这种问题可以从两方面着手:
1、F5探测的方式要准。可以编写一个应用,然后让F5去探测,返回200/500/501之类定制的代码来进行决定要不要进行分发了。另外一个可以直接用F5 + IHS + ODR + WAS,然后加上健康管理策略的方式进行。
2、后端WAS既然在业务繁忙出现性能问题,就在业务繁忙的时候抓几个javacore,找到假死的原因。
分析javacore、GC和heapdump,实际上就是跟IBM JDK打交道,我看的文档是IBM JDK的诊断文档,对排错非常有帮助。
四、WAS集群,实现session共享问题
对我本人来说,节点数少的情况下,我用内存复制方式比较多。内存到内存复制具体配置步骤,分布式环境设置V1.0.docx:http://www.webspherechina.net/club/attachment.php?aid=MjE4Nzl8NDliZTg0MWJ8MTQ3NDE4NTE5OXxiZGQzL0srcjliTm0xSTJONDB6Y3AzbjlGY1RFS2RpSmQ3dTVVdkI5N2dWUzFNMA%3D%3D
量小的话,采用内存到内存复制即可。
量大的话,可以上WebSphere eXtreme Scale进行了。
五、WAS 如何监控到位?
目前,监控WebSphere最好的软件是APM范畴的软件。最火的APM范畴的监控工具,比如Quest Foglight、BMC PATROL等等。以oneapm为例,监控内容如下:使用 OneAPM Java 探针来监控运行在 WebSphere 之上的 Java 应用程序,OneAPM 提供深度高可见性的应用性能管理解决方案,能够抓取到 WebSphere 上 Web 应用程序的行级代码或 SQL 语句调用。OneAPM 还提供了丰富的 JVM 分析、线程、会话等监控信息,可以直观地展示 JVM 堆内存、非堆内存(栈内存、方法区、常量池等)、各个时期对象的内存占用大小、垃圾回收活动详情及类的数量等。
监控 WebSphere 中 Java 应用的主要特点
监视分布式 SOA 应用程序的跨应用程序追踪
将主要业务轨迹的关键业务进行拓扑分析
用性能剖析分析方法调用栈轨迹
深度地监控您的 JVM 健康状况
WebSphere 中 JVM 的内存图表:
堆内存显示图表
非堆内存显示图表
实时显示垃圾回收活动
装载和卸载掉 class count 图表
WebSphere 中 JVM 的线程图表:
活动线程数图表
线程池的活动和空闲线程
WebSphere 中 HTTP Server 的会话图表:
分析每个应用程序的 HTTP 会话数,包括:活跃、过期、拒绝的会话
WebSphere 应用服务器事务:
WebSphere 事务管理、活跃事务监控
监控 WebSphere 应用服务器创建的每个事务总数的变化
监控总的事务的变化
六、ISA healthcenterclient 连接不上agent
was节点虚拟机上已开启 1972 agent代理端口
2016-8-16 9:51:50 com.ibm.java.diagnostics.healthcenter.agent.mbean.HCLaunchMBean startAgent
INFO: Health Center agent started on port 1972.
health center 连接 1972 端口报错:
在 193.28.6.8 上的端口 1972 未检测到 JVM
办法2,你试试看看好使不好使:
${WAS_HOME}${YOUR_JAVA_HOME}jrelibhealthcenter.properties
from:
com.ibm.java.diagnostics.healthcenter.agent.transport=iiop
to:
com.ibm.java.diagnostics.healthcenter.agent.transport=jrmp
相关说明:
com.ibm.java.diagnostics.healthcenter.agent.transport(仅限 Java 应用程序)
设置用于客户机与代理之间连接的传输协议,可以是 IIOP 或 JRMP。如果将 Health Center V1.3.0 或更高版本与 WebSphere? Application Server for z/OS? 一起使用,请将该属性设置为 jrmp。缺省值是 iiop。
答:可以这样简单理解:PTT是在线监控WAS、离线分析WAS监控数据的工具;ISA是离线分析工具的合集。
问:我现在非常困恼,为啥health center client 无法在 端口 1972 未检测到 JVM;不知道哪里出现了问题?
1、我服务器端 health center agent 已经开发了 1972端口,并且我查到了这个端口一直在监听等待连接
2、health center agent 这个代理是was8.5 sdk1.6自带的。
我猜测是否需要升级服务器端 这个agent?
答:com.ibm.java.diagnostics.healthcenter.agent.transportSets the transport protocol to use for the connection between the client and the agent, either IIOP or JRMP. If you are using Health Center version 1.3.0 or later with WebSphere? Application Server for z/OS, set this property to jrmp. The default value is iiop.
通过把传输协议从IIOP 改为 JRMP,可以连通了。高版本的healthcenter client连接低sdk自带的healthcenter agent。
七、was有默认的permsize么?有的话初始值多大?
基于SUN JDK改的IBM JDK,都有permsize。比如下面的based on Oracle 7u79-b14,指的就是基于SUN JDK改的。操作系统主要是windows、linux、solaris平台,设法跟普通的SUN JDK没什么区别。比如64位的JDK,我一般都设置:-XX:PermSize=256m -XX:MaxPermSize=512m
D:IBMjavajava1.7.0_64_SR9FP1bin>java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build pwa6470sr9fp1-20150602_01(SR9 FP1))
IBM J9 VM (build 2.6, JRE 1.7.0 Windows 7 amd64-64 Compressed References 20150406_242981 (JIT enable
d, AOT enabled)
J9VM - R26_Java726_SR9_20150406_1443_B242981
JIT - tr.r11_20150401_88894
GC - R26_Java726_SR9_20150406_1443_B242981_CMPRSS
J9CL - 20150406_242981)
八、WebSphere Process Server : 如何手工清理垃圾实例 ??
操作 WebSphere Process Server 环境,第 3 部分: 设置、配置和维护 WebSphere Process Server Business Process Choreographer 数据库
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0912_grundler/0912_grundler.html
以上这篇文章里面有相应的脚本,你需要根据项目的实际情况,对脚本进行定制,以便完成手工清理的工作。
九、关于WCS8.0 双节点双Solr节点的搭建
问:最近一直在做Websphere Commerce 维护工作,最近要搭了一套WCS双节点后,业务系统在通过WEB访问时,刷新一次就访问到随机的后端app上,后发现可能是solr群集可能配置有问题,在双节点上都在dmgr中部署了solrcluster,appcluster2个群集,也是正常启动的,更改solrconfig.xml,正常网页访问出错,wcs后台没有问题,把solrconfig.xml改成默认网页能正常,web访问会游离导致不正常的页面,请问具体的was8.5 solr群集部署答:Websphere Commerce的集群实施是非常复杂繁琐的,并且还需要根据项目要求进行各种个性化设置。你可以参考DW社区的两篇针对性的文档:WebSphere Commerce 以及 Search Engine 双集群环境的搭建:http://www.ibm.com/developerworks/cn/websphere/tutorials/1111_mazq_commmers/
在 WebSphere Commerce V7.0 中部署 solr search 的一些最佳实践:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1306_liq_solr/1306_liq_solr.html
Commerce8.0 采用了自动化部署方式,在Ibm knowlege Center里面,有很多看完后跟Commerce7.0还是有很大的不同的。十、9080端口占用导致的was启动失败
环境,绩效考核系统Linux6.2,was6.1ND单实例Was正常关闭,但是9080端口迟迟不能释放,使用netstate -an |grep 9080 发现一些连接一直不能释放,那么问题是如果9080端口释放不了,在启动was的时候就会上报端口绑定失败,启动失败,有没有好的办法让这些tcpip的了解快速释放,减少业务停机时间。故障现象记录:
在WAS进程不存在后,使用netstat命令查看9080端口,发现如下结果:
#netstat -aon|grep 9080
tcp 0 153305 ::ffff:20.100.99.40:9080 ::ffff:20.101.37.14:63336 FIN_WAIT1 probe (0.66/0/0)
答:参考调优
http://www.ibm.com/support/knowledgecenter/SSEQTP_6.1.0/com.ibm.websphere.nd.doc/info/ae/ae/tprf_tunelinux.html
在sysctl.conf文件里面增加:
net.ipv4.tcp_fin_timeout = 30
让Linux操作系统主动释放
十一、was书籍推荐
关于WebSphere的技术知识,我主要是看以下这几本redbook网站下载的电子书:
redp4580 WebSphere Application Server V7 Session Management.pdf
redp4855 WebSphere Application Server V8.5.5 Technical Overview.pdf
redp4870 WebSphere Application Server New Features in V8.5.pdf
sg246798 WebSphere ApplicationServer V6 Problem Determination for Distributed Platforms.pdf
sg247461 WebSphere Application Server V6.1 Problem Determination IBM Redpaper Collection.pdf
sg247584 IBM WebSphere Application Server V6.1 on the Solaris 10 Operating System.pdf
sg247615 WebSphere Application Server V7 Administration and Configuration Guide.pdf
sg247708 WebSphere Application Server V7.0 Concepts, Planning, and Design.pdf
sg248022 WebSphere Application Server V8.5 Concepts, Planning, and Design Guide.pdf
sg248043 Enterprise Caching Solutions using IBM WebSphere DataPower SOA Appliances and IBM WebSphere eXtreme Scale.pdf
sg248048 WebSphere Application Server V8.5 Migration Guide.pdf
sg248056 WebSphere Application Server V8.5 Administration and Configuration Guide for the Full Profile.pdf
sg248076 IBM WebSphere Application Server Liberty Profile Guide for Developers.pdf
sg248076 WebSphere Application Server Liberty Profile Guide for Developers.pdf
sg248079 POWER7 and POWER7+ Optimization and Tuning Guide.pdf
sg248194 Configuring and Deploying Open Source with IBM WebSphere Application Server Liberty Profile.pdf
sg248194 Configuring and Deploying Open Source with WebSphere Application Server Liberty Profile.pdf
tips1024 From Development to Production with the IBM WebSphere Application Server Liberty Profile.pdf
基于Linux的WebSphere性能调优与故障诊断