从我一开始工作时,每次在linux下启动weblogic总会发现有这样一句日志:
<Unable to load performance pack. Using Java I/O instead. Please ensure that libmuxer library is in :……
一直都没太在意,以为所谓的“performance pack”只是weblogic的一个“增强组件”一样。直到最近在对新到的一批机器做压力测试的时候才发现了问题。
场景是这样:
3台Dell 的R900型号服务器,4 x Xeon E7430,32G内存,装64位jdk 1.5.0_22和weblogic 9 MP 4,weblogic的JVM分配8G内存。在LoadRunner加到每台机器67并发的时候,整个系统响应奇慢无比,平均响应时间达到了17s左右, 但是server的load值并不高,并且weblogic后端提供其他服务的server则很闲。这是无法忍受的性能问题。用visual vm连上去一看,发现有大量的线程处于等待状态,也就是说,weblogic自己忙不过来了。
事后仔细想了一下,难道真的跟传说中的“performance pack”加载失败,导致weblogic使用java io进行通信致使性能严重下降?在网上google了一番,还真是这样子,据说最严重能导致30%左右的性能下降(Refer1 Refer2 )。知道了问题原因,就能迎刃而解了。
首先根据网上的一些资料,看了一下weblogic安装目录下weblogic92/server/native/linux目录里Native IO所依赖的libmuxer.so,发现该目录下有一个i686的子目录。这是很不正常的现象,因为我使用的是64位jdk,按理说应该是一个类似 x86_64这样的目录才对。
于是乎重装了一下weblogic,重建了域,发现问题依旧。于是又去Oracle的网站看了一下,在weblogic下载页面读到这样一段话:
To use WebLogic Server with 64-bit JVM’s on Linux and Solaris or to use WLS on other supported
platforms, use the WebLogic Server generic installer listed under “Additional Platforms”.
再看看自己的安装介质,文件名赫然是server924_linux32.bin。怪不得,我一开始用的介质都不对。重新下载了 server924_generic.jar(题外话:weblogic 9.x版本的generic.jar在oracle官方下载页面已经无法下载。咨询了一下Oracle的人,得知可以在此处 下载),然后按照说明使用命令
java -Xmx1024m -d64 -jar server924_generic.jar
进行安装。安装完成后,再看${WL_HOME}/weblogic92/server/native/linux路径下,已经是x86_64目录 了:)。然后给目录里的各个文件添加了可执行权限,创建了新的域。然后再启动weblogic,发现还是报“Unable to load performance pack”。我彻底郁闷了。
又想了一下,既然native io相关的文件都已经正确了,还无法正确加载,会不会是某个环境变量影响了weblogic去正确的目录内寻找文件导致的呢?
打开了跟创建域有关的脚本看了看,发现创建域的时候会依赖一个叫做LD_LIBRARY_PATH的变量。而该变量恰恰在我们的场景里用来指向一个 应用需要JNI调用的so文件路径。看来就是因为LD_LIBRARY_PATH被“污染”,导致了weblogic无法正确加载native io library了。直接把项目需要的so文件放到了${JAVA_HOME}/jre/lib/amd64/下,去掉了用环境变量声明的形式,然后再启动 weblogic,没再出现“Unable to load performance pack”,说明Native IO加载成功了:)
然后又对weblogic进行了一些相关的优化,比如jvm参数的调整等等。再进行压力测试时,平均响应时间已经降到了1.9s左右,性能提高了 10倍左右,相当不错了。1.9秒虽然还没有达到最理想的响应时间,但是通过进一步调整jvm参数,并结合优化代码,肯定还会有更好的表现。
相关推荐
网络调优包括确认WebLogic是否启用了NativeIO,这是提高I/O性能的关键技术。在由32位JVM迁移到64位JVM时需要注意,32位的WebLogic Server下载文件不包含64位本地库,可能会影响性能。 Oracle的Exalogic服务器提供了...
**指标描述**:NativeIO是指WebLogic Server是否启用本地I/O功能。在`config.xml`文件中,通过设置`<server NativeIOEnabled="true">`来开启这一特性。这一配置可在控制台(mydomain->Servers->myserver->...
- 推荐使用NativeMuxer以提高性能,确认WebLogic Server使用NativeIO的方法是检查日志中是否有 `<Info><Socket><BEA-000446><NativeIOEnabled.` 的记录。 - 从32位JVM切换到64位JVM时,需要注意32位WebLogic ...
`Enable NativeIO`决定了服务器是否使用本地I/O优化,这对于提高I/O密集型应用的性能尤其重要。`SocketReaders`设置专门用于处理Socket读取的执行线程百分比,它影响网络通信的效率。`Maximum Open Sockets`定义了...
| Server | NativeIOEnabled | Native IO Enabled | 启用WebLogic自有的IO性能包。 | | ExecuteQueue| ThreadCount | ThreadCount | 调整执行队列中的线程数量。 | | | QueueLength | QueueLength | 设置队列的最大...
- **Native IO**:通过启用Native IO可以提高I/O处理效率。 - **Socket Reader**:优化Socket读取机制可以提升网络通信性能。 - **Keepalives**:启用HTTP连接保持功能,可以减少连接建立和断开的开销。 - **...
掌握J2EE框架、数据库技术(如Oracle)、应用服务器(如WebLogic、JBoss)、以及流行的开发框架(如Spring、Struts、Hibernate)等高级技术,对于成为一名优秀的Java程序员至关重要。此外,了解软件架构设计思想、...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别? error 表示恢复...
这意味着当编写代码时,如果集成开发环境(IDE)中的编辑器报告了错误,开发者应该能够根据错误信息快速识别出具体的语法问题,并知道如何进行修正。这种能力不仅能够提高编码效率,还能减少bug的数量,确保代码的...