自动重启 WebSphere Application Server (1)

自动重启应用服务器不见得是每个系统必须的,假设一个系统应用不存在内存泄漏、数据库连接泄漏之类的情形的话。

应用服务器产品本身所具备的集群技术足以保证系统的高可用性,因为集群能够进行负载均衡和失败转移,即使集群的一两个成员停止在理论上以及在短时间内应该对业务不会造成过大冲击。

因此,自动重启应用服务器是在特殊需求下的命题作文,不具有普遍性。在此提出解题思路和实现方法之一,仅作为参考。

一、需求背景
企业级应用系统作为核心系统之一,在后端的数据库服务器设置的数据库连接数是数以千计的,甚至高达5000,开发团队对于核心代码的代码走查和性能测试还是常抓不懈的,但是对于使用频率低的应用代码缺少重视,以及新开发的紧急需求因时间紧代码走查、性能测试不到位,凡此种种,都有可能埋伏有内存泄漏和数据库连接持有不释放的隐患,积少成多,在数天之后即可对后端的数据库造成压力,数据库连接数达到甚至超过预设阀值,此时不是应用服务器重启,就是数据库重启,在这种情形下,应用服务器动作影响面比数据库小得多,因此就提出了应用服务器自动重启的特殊需求。

二、设计思路
1、停止WAS
1.1 读取企业应用服务器实例列表。读取server列表是至关重要的一个环节。在这里我们使用WAS提供的命令serverStatus.sh来获取server列表。但是在对serverStatus.sh -all结果进行文本处理的时候,问题随之而来,如果操作系统默认的字符集不支持中文的情形下,与server相近的分割符分号有中文全角字符双字节(:)和英文半角单字节(:)的两种截然不同的表示法。如何巧妙构造处理中英全半角表示的分号分隔符将是解决问题的关键。

如下为操作系统默认支持语言分别为中英环境下的真实实例:
1.1.1 在中文环境下,以全角字符双字节(:)分号为分割符:
[root@test1 bin]$ sh serverStatus.sh -all
ADMU0118E: 日志文件无法写到位置
           /opt/IBM/WebSphere/AppServer/logs/serverStatus.log;请使用
           -logfile 指定不同的位置
ADMU0503I: 正在检索所有服务器的服务器状态
ADMU0505I: 在配置中找到服务器:
ADMU0506I: 服务器名:interface
ADMU0506I: 服务器名:nodeagent
ADMU0506I: 服务器名:test2web1
ADMU0506I: 服务器名:test2ejb1
ADMU0506I: 服务器名:WebServicestest

1.1.2 在英文环境下,以半角单字节(:)分号为分割符:

[root@test2 bin]$ sh serverStatus.sh -all
ADMU0118E: The log file cannot be written to location
           /opt/IBM/WebSphere/AppServer/logs/serverStatus.log; please specify a
           different location with -logfile
ADMU0503I: Retrieving server status for all servers
ADMU0505I: Servers found in configuration:
ADMU0506I: Server name: interface
ADMU0506I: Server name: nodeagent
ADMU0506I: Server name: test1web1
ADMU0506I: Server name: test1ejb1
ADMU0506I: Server name: WebServicestest

针对中英文语言环境下分号分别为中文字符双字节与英文单字节的困扰,给出统一的一种可行的解决方法如下:
#定义WAS的安装路径
Basepath="/IBM/WebSphere/AppServer"
#获取WAS的server实例列表
appsrvlist=`$Basepath/bin/serverStatus.sh -all|sed 's/ADMU0506I://g'|grep -v nodeagent|sed 's/ //g'|sed 's/:/:/g'|awk -F ':' '{ORS=" "}{print $2}'`

其中获取server列表的脚本命令解释如下:
a、使用serverStatus.sh -all命令获取所有的;
b、根据关键字ADMU0506I搜索适配行;
c、在结果集中过滤掉nodeagent行,以防将nodeagent进程误停;
d、在结果集中将单字节的空字符串(" ")过滤掉;
e、在结果集中将双字节全角分号(":")替换为单字节半角分号(":");
f、根据统一的单字节半角分号为分隔符获取server列,然后server之间使用空格打印输出server列表。

1.2 依次停止企业应用服务器实例。使用stopServer.sh命令。

2、启动WAS
2.1 读取企业应用服务器实例列表。
2.2 依次启动企业应用服务器实例。使用startServer.sh命令。

3、设定自动重启频度和时间
3.1 让业务决定重启策略。一般原则下,根据7*24不间断运行的要求下,是不大可能停机自启的。但是在没有办法的情形下,业务和IT部门经过协商也是可以相关作出一定的妥协和让步。如可以将重启频度策略为一周一次,重启时间策略定在业务最闲、使用最少的短暂时间如在凌晨六点五分自停止WAS,六点十分钟间自启动WAS。

3.2 设定定时重启。在unix下,可以通过crontab进行设置。如上述提到的一周一次,重启时间,包括自停止和自启动两个时间点,假设为周六凌晨的六点五分停,六点十分启。
5 6 * * 6 command line
10 6 * * 6 command line

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值