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、线程情况,以备错误诊断使用。虽然可以调整应用服务器参数使之不产生此类文件,但为了分析问题,通常需要从此类文件入手。这类文件通常都特别大,例如heapdump文件,可能达到几百M。如果多次出现OutOfMemroy,对磁盘空间的占用很快。因此,必须考虑为此类文件预留磁盘空间。
9、 WAS安装程序还需要在系统的临时目录/tmp中有100M以上的空闲空间。
10、 用户发布到WebSphere应用服务器上所有应用程序以及应用自身的应用日志的占用空间。这个大小与实际应用相关,而且不同应用可以差别很大。
二 性能设置
1、 Java虚拟机堆大小(JVM Heap Size): 控制JVM代码可使用的堆大小,单位M。该参数在服务器->应用程序服务器>进程定义>Java虚拟机中进行设置。JVM最大堆大小默认是256M,在生产环境中通常要根据机器物理内存情况、应用运行特性来设置,且多数情况下都要把此参数调大。根据经验,内存充足时,通常的调整在500M到1024M之间。需要注意的是,建议JVM Heap的最大值不要超过1024M,如果JVM Heap Size过大,可能会引起内存分页,或者造成JVM垃圾回收时间过长,反而影响应用服务器性能。有关Java虚拟机调优的具体信息,请参考调整JVM参数。
2、 Web容器线程池:该参数在“服务器 > 应用程序服务器 > server1 > 线程池”的“WebContainer”中进行设置,默认值是10到50。如果硬件资源允许,通常会把线程池的最大大小调到100。
3、 数据源连接池:该参数在资源->JDBC->数据源->数据源名称,选择“连接池设置”中设置,默认大小为1到10。根据资源设置的队列(Queue)原则,从Web容器线程池,到数据源连接池的参数设置,应该是从大到小的管道。前面我们列举了Web容器线程池的最大值设置100,对于数据源连接池,设置的最大值通常不超过50。多数情况下调整为30。实际运行中可以修改此参数值,观察调整对性能是否有正面影响。注意,如果把数据库连接池最大大小调得过大,JVM有限的资源都耗费在维护连接池、处理与数据库连接上,可能反而造成WAS性能的下降。
4、 WAS 进程日志参数:WAS进程日志常用的有SystemOut.log和SystemErr.log。这两份日志默认大小为1M,历史日志文件数为1份。在生产环境中,这样的设置通常不足以充分保存发生问题时的错误信息。我们可以通过修改日志默认大小、历史日志文件数来保存更多的信息。注意,不要把单份日志文件大小设置过大(例如,超过10M以上),否则可能影响WAS性能。另外,我们建议把应用日志与WAS日志分离开。如果应用中大量以System.out.print或者System.err.print来保存应用状态日志,也可能会影响服务器性能。
5、 Heapdump文件:前面我们提到,Heapdump文件对磁盘空间占用很快,因此,可以设置IBM_HEAPDUMP参数把Heapdump文件存放到指定目录下。
6、 Web服务器的访问日志access.log:IBM Http Server的访问日志access.log默认是打开的,其中记录了经过Http服务器的请求信息。在高并发的系统中,这一日志增长非常过,当日志过大时,可能占用过多磁盘空间或引起性能下降,如果您的系统不需要这份日志,或者有其他技术手段保存用户访问信息,可以关闭该日志。具体做法为:打开IBM Http Server安装目录/conf目录下的httpd.conf文件,搜索CustomLog,把CustomLog所在行用#注释掉即可。
三、常见的日常管理任务
1、查看/更改应用服务器端口
? 更改应用访问端口
默认情况下,WAS的管理控制台和应用访问是两个不同的端口。访问WAS的管理控制台或者WAS上部署的应用,所使用的端口由应用服务器端口以及虚拟主机决定。假设我们要把应用访问的端口从9080变成9082(实际工作中,如果没有Web服务器,有的环境会希望把应用访问端口变成80,方法类似),则按如下步骤进行:登陆WAS管理控制台,选择 左边菜单 服务器 - 应用服务器,点击 server1,选择“端口”,点击“WC_defaulthost”(如图8),修改端口为自己想要的任意端口(注意避免端口冲突),例如,9082。然后点击“确定”。然后“保存”。
? 更改WAS管理控制台端口
登陆WAS管理控制台,选择 左边菜单 服务器 - 应用服务器,点击 server1选择“端口”。然后更改WC_adminhost为自己希望的管理控制台端口。然后点击“确定”、“保存”。选择 左边菜单 环境 - 虚拟主机,点击;然后选择admin_host,选择“主机别名”。把原有端口9060改成与前面应用服务器/端口/WC_adminhost一致的端口,例如,9063。或者点击“新建”,创建一个主机别名 *, 9063。然后“确定”,“保存”。目的就是要让 应用服务器/端口/WC_adminhost的端口出现在 虚拟主机/admin_host的主机别名列表中。
2、管理安全性
(1)启用管理安全性
启用管理安全性将激活用于防止未经授权的用户使用服务器的设置,简单来说,进入管理控制台、更改应用服务器配置、停止应用服务器进程这些管理任务,都需要输入预先定义的用户名和密码才能完成。缺省情况下,创建概要文件时会启用管理安全性(图9)。如果在创建概要文件时没有选择“启用管理安全性”,在随后使用过程中又希望启用,则可按如下步骤进行:
首先进入控制台,例如:http://was_ip:9060/admin,注意这里登陆的用户一定要是设置安全性的用户。例如,admin。选择“安全性”>“安全管理、应用程序和基础结构”,然后点击“安全配置向导”(图10)。为了配置的简便性,在“指定保护范围”中,可以不选择“使用 Java 2 安全性来限制应用程序访问本地资源”;在“选择用户存储库”中接受默认选项,用户存储库为“联合存储库”,点击“下一步”;在配置用户存储库中填入用户名、密码。如果您是第一次启用管理安全性,则输入一个新的用户名(您登陆管理控制台的用户名)和密码。这个用户名密码是任意的,并不要求是操作系统用户,因为联合存储库默认的用户条目来自于文件;如果以前曾经使用该存储库启用过管理安全性,则使用存储库中持有管理员特权的用户名和密码。点击“下一步”、“完成”。保存之后重启应用服务器,这时登陆管理控制台等就需要提供您预定义的用户名/密码了。
(2)停用管理安全性
停用管理控制台很简单,在图10所示页面,不选择“启用管理安全性”,点击“应用”,保存并重启应用服务器即可。有一种特殊情况下,特如忘掉了管理员密码,此时我们无法登陆管理控制台,从而无法在管理控制台中停用管理安全性。这时,可从$WAS_HOME/profiles/xxx概要文件名/bin目录下,发出如下命令: wsadmin -conntype NONE 。当wsadmin的命令行窗口出现之后,发出下列命令: securityoff 。上述操作在应用服务器启动或停止的状态都能发出。再次启用WAS时,就是停用管理安全性的状态了。
(3)更改管理员密码
当我们需要更改管理员密码时,可以选择“用户和组”>“管理用户”,如图11,在搜索内容为“*”时点击“搜索”,会列出该存储库中的所有用户。选中管理用户标识,可更改该用户的密码。更改即时生效。
(4) 停用管理安全性
停用管理控制台很简单,在图10所示页面,不选择“启用管理安全性”,点击“应用”,保存并重启应用服务器即可。有一种特殊情况下,特如忘掉了管理员密码,此时我们无法登陆管理控制台,从而无法在管理控制台中停用管理安全性。这时,可从$WAS_HOME/profiles/xxx概要文件名/bin目录下,发出如下命令: wsadmin -conntype NONE 。当wsadmin的命令行窗口出现之后,发出下列命令: securityoff 。上述操作在应用服务器启动或停止的状态都能发出。再次启用WAS时,就是停用管理安全性的状态了。
(5) 更改管理员密码
当我们需要更改管理员密码时,可以选择“用户和组”>“管理用户”,如图11,在搜索内容为“*”时点击“搜索”,会列出该存储库中的所有用户。选中管理用户标识,可更改该用户的密码。更改即时生效。
(6) 忘记管理员密码
如果忘记管理员密码,我们无法进入管理控制台更改密码。此时,需要先用“停用管理安全性”一节中wsadmin命令的方法,停用管理安全性,然后“更改管理员密码”,再次“启用管理安全性”即可。
(7) 创建更多的管理用户
使用启用管理安全性的WAS环境时,默认情况下只有一个管理员ID,这意味着同一时刻只有一个人能登陆管理控制台。这对于多人开发小组在同一WAS环境发布测试时并不方便。您可先在存储库中创建一个用户,然后为该用户ID分配相应的管理角色。具体步骤如下:1)选择“用户和组”>“管理用户”,如图24,点击“添加”,添加一个用户ID,例如,admin1。保存。 2) 选择“用户和组”>“管理用户角色”,如图25,填入用户名(必须是在存储库中已经存在的用户名),选择相应的管理角色,例如,“管理员”。点击“确定”,保存。这样,下次重启WAS时,两个用户都能同时登陆管理控制台。
3、备份/恢复概要文件
生产环境、概要文件配置过于复杂或经常更改时,我们需要定期备份概要文件,以便必要时快速恢复。您可使用backupConfig 命令备份配置文件。例如,要备份概要文件AppSrv01的当前配置,可以从$WAS_HOME/profiles/AppSrv01/bin目录下,发出命令 backupConfig,它会将AppSrv01当前概要文件默认生成一个压缩包,您也可以指定该压缩包的名称,例如:backupConfig WebSphereConfig_2007_05_30.zip。恢复配置时,使用restoreConfig WebSphereConfig_2007_05_30.zip。
4、正确卸载WAS
需要提醒的是,WAS的卸载过程不是直接删除目录,如果这样做,下次你可能无法在同一台机器上成功安装WAS。在卸载WAS之前,先停止机器上的WAS进程,用ps –ef |grep java确保没有was进程在运行。然后,执行WAS_HOME/uninstall/uninstall.sh命令卸载WAS。如果因为某些特殊原因卸载向导引导的卸载过程没有成功(例如,您直接删除了WAS安装目录),或者您希望在同一目录再次安装WAS,请参照信息中心“手工卸载”给出的建议。
应用部署通常会涉及如下几个任务:配置应用所需要的环境:如系统变量、虚拟主机、类路径、安全性等等;配置应用所需要的资源如JMS资源、数据源等。其中,需要注意的是:
(1)应用打包:部署在 WebSphere 应用服务器上的应用可以是打包的*.ear/*.war文件,也可以是未打包但符合J2EE规范要求的组件。在生产环境中,推荐使用打包的*.ear/*.war文件,便于版本控制和管理。对于复杂项目中多个J2EE组件的打包,请参见文章“关于J2EE应用开发项目包的管理”。
(2)管理 Utility Jar包:大多数J2EE应用都会有一些公用的Utility Jar包,首先要强调的是:一定要避免在同一个类载入路径下存在同一个类的多个版本!这会在实际运行中带来很多莫名其妙且难以诊断的问题。其次,对于JDBC驱动这类通用等级较高的Utility Jar包,可以放置在<WAS_HOME>/lib/ext目录下;对于多个应用共享的Utility Jar,可以放在 <WAS_HOME>/lib/ext中,也可以放在shared library(共享库)中,推荐放在shared library中;对于单个应用使用的Utility Jar,可与应用打包在一起,或放入shared library中。共享库的使用能够避免Utility Jar包多个版本的混乱,以及Utility Jar包的冲突。共享库配置方法请参见红皮书sg247304 12.5.4 Step 4: Sharing utility JARs using shared libraries章节。
(3)Jar 包冲突:Jar包冲突问题在大型Java软件开发中经常遇到,简单的说,当不同应用使用的公用Utility Jar包、应用服务器底层的Jar包中存在同名、且版本不同的类时,我们称之为Jar包冲突。这种问题的解决办法可以参考文章如何在WebSphere中解决Jar包冲突 。
(4 )会话超时:针对应用场景的不同,不同应用期望的会话超时时间各不相同。WebSphere应用服务器的会话管理分为Application server、Application、Web Module三个级别。顾名思义,在每个特定级别上更改的会话管理的配置,对当前级别起作用。部署在WebSphere应用服务器上的应用,默认的会话超时时间为30分钟,默认的会话管理级别是Application Server。如果您期望更改您的应用,例如,DefaultApplication的会话超时时间,可按如下步骤进行:选择应用程序>应用程序名>会话管理(图13),选择“覆盖会话管理”,并在“设置超时”中填上期望的会话超时时间。点击“确定”保存即可。
(5)环境变量设置
当应用需要通过写Java环境变量的方式配置一些变量时,可在应用服务器启动脚本中用-D参数指定,也可以在应用程序服务器 > 应用程序服务器名(例如,server1) > 进程定义 > Java 虚拟机中设置“通用JVM参数” -Daaa=xxx。
比如:oracle驱动缺少时分秒的解决办法
应用程序服务器 > server1 > 进程定义 > Java 虚拟机 > 定制属性
下新建
-Doracle.jdbc.V8Compatible=true
解决中文乱码问题
设置ibm-web-ext.xmi文件中 autoRequestEncoding="true" autoResponseEncoding="true"
应用程序服务器 > server1 > 进程定义 > Java 虚拟机,为通用 JVM 自变量指定 -Ddefault.client.encoding=GBK