BEA WebLogic应用程序通常会有一些非Java的外部触点,Web服务器和数据库就是例子。WebLogic应用程序的整体性能受到这些其他组件的执行情况和Linux的整体性能的共同影响。
收集EPA(Environment Performance Agent)数据的例子包括:
· Linux VM(虚拟机)数据
- 是否内存太少从而导致Linux频繁交换?
- 有多少任务处于挂起状态,系统的平均负荷是多少?
· Web服务器数据
- 在测试期间产生了多少http错误?
- 有没有子线程被挂起?
· 数据库
- 剩余多大空间?
- 缓存命中率是多少?
· 网络
- 什么IP在产生最多的请求?
- 网络上是否有任何报警事件?
应对什么进行监控?
这是一个意味深长的问题,答案实际上取决应用程序以及您监控和衡量成功的目标。
作为一条普遍的规则,包括应用程序中的J2EE组件在内,任何给应用程序提供输入的部分,或者应用程序服务器处理请求所依赖的事物都应该受到监控。复习上面的"环境可见度"一节,并考虑您自己的应用程序所具有的触点。您是如何衡量可用性和可接受的性能,您又将实际采取什么措施来处理所搜集的数据(非常有价值)?
收集CPU、组件响应时间、内存利用率、线程、JDBC池利用率和并发请求等性能数据是理解应用程序性能的起点。当然,还有许多其他的组件也是可用的,并且可以统一衡量。
在部署应用程序之前一个需要考虑的问题就是,如果应用程序没有在所设定的基线内运行的话,将会发生什么情况(假定在产品阶段之前创建了一个基线)?
Linux配置
第一步就是要理解物理机器的概念。借助一些显示工具用于:
· 显示CPU信息(cat/proc/cpuinfo)。显示每台机器的CPU类型信息。
· 显示内存信息(cat/proc/meminfo)。显示内存容量、交换分区和缓存的详细情况。
· 显示磁盘容量及剩余空间(du -lh)。
· 显示网络配置(ifconfig)。
以上收集的信息将有助于确定应用程序文件所应驻留的位置、网络绑定,以及应用程序(Java堆)可使用内存的大小。
检查一下机器上正在运行的服务。例如,运行BEA WebLogic的机器是否应该运行FTP或邮件服务器?删除(或注释掉)不必要的服务,并编辑/etc/xinetd.conf或/etc/inetd.conf(取决于Linux发布)。一旦将那些不必要的服务删除掉后,就建立一个关于磁盘和内存利用率的基线。用负载生成工具观察Linux的性能表现,每秒产生多少次I/O操作,使用多少交换空间(iostat和vmstat)。
这些基线数据随后可被用于监控。
运行时秘密
现在,WebLogic已部署在Linux上,让我们从Linux的角度去看一下某些进程信息。
找到针对WebLogic的Linux进程号(ps -eflgrep java)。注意,Linux为每个线程具有一个进程,所以,相对于其他的操作系统,显示的内容会略有不同。
举例来说,假设进程号(pid)为27260。
如果我们想知道哪个终端启动了服务器以及该终端是不是远程的,该怎么办?进入/proc/fd目录,其中包含该进程所使用的文件描述符列表。现在使用列表命令(ls -l)列出fd 0(标准输入设备),则会列出实际所用的设备。在本例中是/dev/pts/6。还可利用Linux的who命令查看登录该设备的用户及其IP地址。
> cd /proc/27260/fd
> ls -l 0 lrwx------ 1 root root 64 Nov 20 14:21 0 -> /dev/pts/6
>who
weblogic pts/6 Nov 20 10:55 (192.168.1.105)
也可显示startup命令和该进程正在使用的环境变量。对于想要跟踪某个功能选项是否已经通过脚本传递给了进程,此项操作尤为有用。
另外一个很有用的技巧可用来确定该进程正在使用哪些文件。显示maps文件(cat maps),此命令显示已经打开的文件。一个例子用例是确定某个JAR文件是否已加载以及它是从什么目录加载而来的。
> grep trader.jar maps
/opt/bea/weblogic81/samples/domains/examples/examplesServer/stage/
_appsdir_webservices_trader_ear/trader.jar
调优考虑
当应用程序进入产品阶段很短时间后(3-6个月),操作系统、应用程序以及任何触点都应该调优--或者至少应该重新检查一下配置参数以确保它们还是适当的。这是对环境及其触点进行持续衡量的好处之一。如果没有针对关键的参数进行持续衡量,那么这种衡量将是徒劳的。
有时,当工作负载发生了变化时,调优是很必要的。当更新的代码或设计已经迁移到产品中之后,或者应用程序现在支持一个更大的用户群,那么调优可能会较为复杂。无论何种原因,对应用程序的调优需要小心谨慎地进行确认,在大多数情况下,只有性能监控人员才能对整个应用程序施加影响。首先,在操作系统级启动,并依次通过不同的堆栈。查看当前性能标准,并使用诸如Transaction Tracer的工具快速显示哪些组件占用一个给定请求中的大部分处理时间。