IBM WebSphere Portal宕机或性能低常见问题分析 及解决措施-程序员宅基地

技术标签: java  数据库  大数据  

使用 IBM WebSphere Portal构建企业门户系统是用户比较睿智的一个选择,但是由于Portal产品比较复杂,宕机或性能低也通常是用户较为头疼的问题。经常有客户门户上线后出现页面空白或无法访问,甚至宕机的问题,令人头疼不已。本文以IBM Portal常见性能低下或宕机的常见原因分析,并以笔者十几年的产品实施经验提出普众性的解决措施。

WebSphere Portal性能瓶颈通常被划分为如下八大隔离区,每个隔离区的性能低下都有可能带来用户访问速度慢、系统失去响应、空白页、页面无法显示甚至宕机的情况。如图:

接下来我们依次介绍这八大隔离区的问题点和性能优化策略:

一、  Ajax异步调用等感受优化:

Ajax异步调用感受优化指的是通过技术手段,在其他方面都已经达到最佳优化的前提下,充分利用异步调用等技术,提高用户速度感受,但实质上,系统的整体性能并未提升。

(一)问题分析

这种情况通常出现在登录后进入首页时的体验上,尤其是当首页部署的 Portlet比较多的时候,更有甚者,多个Portlet要调用后台的资源或者逻辑处理,每个Portlet的响应时间都比较慢,如果要等到所有Portlet初始化完毕门户首页才显示出来,那么用户等待的时间可想而知,这将带给用户非常差的体验。

(二)优化策略

IBM WebSphere Portal分为门户容器和Portlet容器两部分组成,Portal容器加载完毕后再加载Portlet容器。Portal容器加载时主要是编译并处理主题皮肤、容器运行所依赖的各种类库、数据库等资源;Portlet容器则是先有登录Portlet与Ldap通信鉴权,之后每个Portlet进入init()方法加载各种以来提交,然后进入doService()处理各种业务逻辑,得到处理结果并传输回门户后,统一编译成Html格式,与门户容器编译出来的Html文件共同拼装成一个Html文件呈现出来。多个Portlet完成业务逻辑并返回结果的时间长短不一,系统默认要等到所有Portlet回传完所有数据后才统一呈现。那么,响应时间最长的那个Portlet所需的时间就成为木桶上最短的那块木板。幸好,WebSphere Portal从7.0版本开始支持Ajax异步加载技术,本层处理的优化逻辑是采用Portlet异步加载技术,即使当只有1个Portlet处理完毕,也交由门户容器打包呈现出来,后续每个Portlet处理完毕后逐一加载,直至加载完毕。就用户来说,他会在较短的时间内先看到门户首页,和几个Portlet栏目,这时候用户的注意力被吸引到已经呈现出来的Portlet上面,剩余几个 逐一 加载的 Portlet用户会降低感知,所以整体上用户的感受较好。

这是一种设计思想,需要应用到门户系统建设的各个角落。例如:首页主题皮肤部分可能设计成 6张图片来回滚动,形成一个动画播放的效果。某些极端场景下例如当网络传输速度较低而6张图片的体积又较大时,如果等到6张图片完全传输完毕才加载动画播放功能,则用户感受也会较差,变通的方法是当下载第1张图片时,通过代码控制 先将这张 图片显示出来,然后等其余 5张图片下载完毕后再执行动画播放逻辑,这样用户的感受也会大大提升。

二、  JVM堆栈与Web线程池优化

JVM堆栈优化与Web线程池优化指的是Portal容器本身的JVM和其他各项参数的优化,也就是JVM容器本身以及垃圾回收策略的配置。

(一)问题分析

WebSphere Portal服务运行在WebSphere Application Server容器上的一个独立服务器,既然是JVM容器就会有大小限制。处理用户请求的每个逻辑处理都需要在JVM中开辟内存区域,用于存储暂存数据共CPU及CPU的二级缓存调取执行二进制运算。特别是有些质量不高的代码在占用内存处理完之后没有及时执行clear()方法清空自己占用的内存,而单独依靠JVM本身的垃圾回收处理机制其处理能力是有限的。事实上,3.5G的内存是很容易被占用光的。

当已经占用的内存大于 JVM本身配置的内存大小而且此时JVM还未进行垃圾回收时,就会出现没有多余的内存用来存储更多用户新增的处理请求了,这时候的表现就是新请求需要等待JVM释放内存,而JVM如果不释放内存,则用户体验就是页面一直空白,直至超时后显示“页面无法响应”、“网页无法显示”等错误,甚至Hung住或者Crash掉,这就是宕机。

(二)优化策略

WebSphere Portal服务运行在WebSphere Application Server容器上的一个独立服务器,通常64位机器上会指定JVM的最大堆栈大小为3.5G,因为超过3.5G后单纯依赖JVM本身的垃圾回收机制在过大的JVM堆栈里回收执行效率反而会降低很多,这里还需要配置新生代内存的大小等。当然,如果是老式的32位机器,则JVM最大大小不可超过1.8G,因为32位机器上最大寻址能力就是2G而已。

同时 Portal本身的多线程机制当用户访问量较大而又不能及时释放时也会好用较多的WebContainer,通常我们 会将线 程池个数调大 10倍。如果日志中爆出“some threads is hung ,waiting for ”等类似的错误时,很可能就是线程池已经不够用了。当然,这时候我们首先得排除程序错误导致的线程池不释放导致耗尽的原因,如果排除此项,八成就是线程池个数太少导致的。而这种错误非常严重,会直接导致页面空白、页面无法显示等用户响应丢失的情况,不久就会导致宕机。

一、  主题与皮肤调优

主题与皮肤优化指的是客户为了适应定制化需求,会为客户开发一套或多套门户主题与皮肤(即: Themes 和 Skins)。笔者已经遇到多家客户由于主题皮肤的问题导致系统性能低下或者宕机的情况发生了。

(一)问题分析

主题皮肤导致的性能低下或宕机主要体现在两个方面:第一,过多的主题或皮肤。很多用户为了丰富门户的视觉效果,会要求开发商开发多套主题和皮肤,几乎每张主页面都要使用单独的一套主题,每套主题下每个 Portlet都要使用一个单独的皮肤。我们知道,Portal里每套主题或者每套皮肤都在单独的一个文件夹里三十多个文件拼装编译出来的。用户在使用门户系统时,多套主题与皮肤被加载,这意味着有数百甚至数千个jsp或者jspf,css,js,jpg等文件被加载进内存,太消耗系统资源了!这种情况多发生在一些对门户视觉效果要求较高的客户那里;第二、主题或皮肤文件中存在质量不高的代码,例如:有些主题皮肤里存在死循环,或者需要读取其他系统甚至互联网上的一些资源,当外围系统没有及时处理并返回结果时,主题皮肤一直在等待这个资源,如果资源没有被返回,就得等到超时,如果超时了都在等待的话,就很明显地出现页面空白或显示不出来了。

(二)优化策略

笔者强烈建议,能通过一些参数化的方式解决的问题尽量通过参数化的方式,例如多个部门门户的主题皮肤使用同一套主题,通过参数化主题上的 Logo图片,参数化文字等方式实现各个部门门户网站的显示效果差异;同样的,每套主题尽量不要超过5套皮肤,还是通过参数化的方式来进行Portlet不同风格的呈现。

至于主题皮肤代码层面,建议项目组花大力气严格检查有没有存在死循环、读取大数据量、不及时释放内存等低质量代码、等待依赖系统响应等低质量逻辑。对不懂代码的客户来说如果要采用逆推的方式判断是否存在代码质量的情况,则可以使用 LoadRunner对系统进行抗疲劳测试,通过耐压测试,让系统低质量代码对内存、CPU等的消耗和侵占尽量表现出来。 鼎亚 科技可以为全国的用户提供性能调优方面的免费培训和压力测试方面的指导、培训。

二、  SQL执行效率优化

门户性能低或者宕机问题不仅仅是由于内存耗尽导致的,还有 CPU和硬盘。SQL执行效率是同时可能对这三方面造成损耗的重要因素之一。

(一)问题分析

SQL执行效率的损害通常体现在如下两个方面:(1)SQL慢查询或者语句执行大数据量的查询并返回了大数据量的查询结果,例如某客户一下子查询出4000万条用户登录记录并打印在了主题文件里,这些大数据量既会占用内存,又会消耗CPU,甚至写入一些硬盘文件,天长日久导致硬盘被占满而宕机。SQL慢查询则会带来大量的用户等待时间。(2)SQL语句执行次数过多或死循环。系统要查询一组数据时,需要到多张表里执行多组查询并拼装处理返回的结果,或者某些极端条件出发SQL执行死循环,既消耗大量的CPU资源又不返回结果,宕机也就是不可避免的了。

(二)优化策略

务必通过强壮的代码审查( Code Review)识别出SQL慢查询、大数据量查询、死循环等问题,并合理设计表结构,合理设计SQL语句。与上一节相同,对不懂代码的客户来说如果要采用逆推的方式判断是否存在代码质量的情况,则可以使用LoadRunner对系统进行抗疲劳测试,通过耐压测试,让系统低质量代码对内存、CPU等的消耗和侵占尽量表现出来。 鼎亚 科技可以为全国的用户提供性能调优方面的免费培训和压力测试方面的指导、培训。所谓的抗疲劳测试指的是,录制尽可能覆盖所有页面、所有逻辑的功能点,并设置 LoadRunner在没有思考时间的前提下,进行长达72小时的耐久性测试,所谓“日久见人心”,哪怕SQL执行效率稍微有一点点低下,资源有一点点没有及时释放的,通过高强度的耐压测试,也会让问题无限放大,最终暴露出来。

三、  数据库性能优化

数据库性能优化指的是数据库本身的参数优化,以及 WebSphere使用数据源连接池的参数优化。

(一)问题分析

IBM WebSphere Portal使用数据源连接池即长连接的方式提供数据库服务,所以不合理的数据源连接池配置会导致数据库处理逻辑等待时间过长或者宕机。例如:如果某些Portlet应用频繁读取数据库,而连接池的个数过低,就会有大量的数据库读写逻辑在排队等待数据库连接,甚至超时后导致宕机,最直接的后果就是用户的很多Portlet应用一直初始化不出来,原因是在等待其他逻辑释放数据源连接池后进行数据库读写操作。

(二)优化策略

通常我们会在 WAS控制台上配置数据源连接池的个数为系统默认的3-6倍,具体视各家客户的门户内容使用数据库的频率高低而定。数据源连接池个数过低,会造成Portlet逻辑排队等待拉长响应时间;个数过高则会导致系统可用内存降低,因为每个数据源连接池会占用大约3M左右的内存,如果配置几百个数据源连接池,则仅仅数用于数据库连接的内存就会占用1个多G,计算我们配置了3.5G的JVM,也没剩多少计算内存用于门户的逻辑处理,同样也会导致系统的性能降低或宕机。这里还要强调数据源连接池的过期时间,不恰当的TimeOut也会带来等待响应或系统无法处理用户的正常请求。最准确的个数配置来源于最佳实践。直白的说,就是通过设置不同的参数后进行合理配置的LoadRunner压力测试,压力测试场景的设计尽量贴近用户使用的真实场景,来模拟生产环境的真实状况,然后通过对比LoadRunner压力测试表现最好的那组,确定数据源连接池的最佳配置。

额外的,通常数据库服务器和门户服务器是不同的服务器,中间架设防火墙的客户比例非常高,这里我们要强调一下一定协助客户合理配置防火墙策略,因为防火墙切断门户与数据库之间的长连接而导致的门户宕机案例非常之高。

四、  数据 /数据集优化

数据与数据集优化指的是无论 Portal容器还是Portlet容器读写的数据量大小问题,数据量过大会消耗大量时间和空间资源,会导致系统性能低下或宕机。

(一)问题分析

Portal主题皮肤里的代码和(或)Portlet应用逻辑代码在执行大数据量操作时,会消耗大量的时间资源、空间资源;时间资源体现在CPU处理上,空间资源体现在内存占用上。无论是CPU过于繁忙还是内存消耗过大都是一种危险的事,最常用的就是分段读写、分页显示、大数据转移等问题。

1)大数据量读写。数据库执行大数据量读写时,会消耗大量的CPU时间和内存占用,用户并发量一上升,就很容易导致性能问题。

2)分页显示。这个无需多说,用户通常看的是前3页,如果一下子把几百页读取过来,内存空间的占用是巨大的。

3)大数据转移,指的是某些表里可能存储非常大量的数据,例如用户登陆日志,数据积累越来越多,读写速度就会越来越慢,系统资源消耗就会越来越大,性能也就越来越低了。

(二)优化策略

针对于常见的这些问题,分别介绍调整策略。这部分其实最多的也是与常规 Java开发相同,请自行参考。

1)分段读写指的是,逻辑代码在读写数据时,尽量不要大数据量读写,例如向数据库或文件系统中一次写入超过10万条数据,或者读入上百万条数据,这种效率肯定极低,尝试修改设计,优化读取逻辑。

2)分页显示。这个无需多说,每次读写最多3页,等用户点击翻页时再读取更多的数据。

3)大数据转移。适用于某些表里要存储大数据量时,最好不要超过千万条记录的级别,通常用在用户登录日志等,随着使用时间的推移,表中的记录条数越来越多,读取的时候也很容易消耗资源。

五、  Portlet代码与逻辑优化

Portlet开发实际上与传统的Java开发并无二致,Portlet等待数据库连接、死循环等带来的系统性能低下,成为Portlet层面优化的问题本质。

(一)问题分析

Portlet代码导致性能低下的情况通常有:(1)执行逻辑效率低或死循环导致Portlet响应异常地慢,例如要到十几套系统里读取各个系统的待办信息等;(2)Portlet等待某些资源而这些资源没有及时加载或者压根就加载不出来,而Portlet端有没有处理读取不出来时候的出错处理,导致Portlet一直在等待资源,系统线程Hung住也就很正常了。

(二)优化策略

这需要合理设计 Portlet实现逻辑。例如:统一待办Portlet,我们可以采用逆向推送的方式,当各个业务系统产生新的待办事项时,主动推送到门户缓冲数据库(可以认为是Broker层),然后Portlet直接到缓冲数据库一个表里读取待办条目,这样可以提高Portlet性能达数十倍。

第二,通过严格的代码检查消除 Portlet中资源等待、死循环等问题。这个问题的检查与普通的Java开发并无二致,本文不再赘述。

一、  网络传输(包大小)优化

显示逻辑和打包逻辑优化多发生在网络速度不太高的客户场景中,尤其是部署在云端或者互联网上的客户,指的是过大的数据量传输导致了用户响应时间太慢,慢到用户以为系统宕机了。备注:如果传输时间超时,那就真宕机了。

(一)问题分析

我们知道,所有用户的请求都是通过服务器端唯一的网线出口与用户的客户端电脑(或手机)建立比特流传输的。建设每个用户访问门户需要传输 3M的数据流量,这3M包含了逻辑处理完成之后编译出来的css文件,jss文件,html文件,jpg/png等图片文件,假设有300个用户在并发访问,则这300个用户一共需要传输3Mx300=900M数据流量。如果我们服务器申请的带宽是百兆,也就是每秒钟能传输12.5M数据,则即使出去逻辑处理的时间,进网路传输的消耗,就需要900M除以12.5M/S等于72秒,这是一个多么庞大的数据,每个用户光等待传输就要等待72秒

(二)优化策略

在不影响图片观看效果的情况下,我们建议用户尽量降低图片的大小,对程序开发者来说,在不影响功能的前提下,尽量为 js文件、css文件等减肥,将其体积降到最低,尽量降低网路传输带来的用户体验消耗。作为系统架构师或项目经理,要充分调研,充分考虑到真实的用户并发情况,并协助用户购买或分配合理的网络带宽。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9116427/viewspace-2219369/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9116427/viewspace-2219369/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/congying2011/article/details/100424482

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文