Oracle应用服务器性能监视和调整(CPU负载高)

Oracle应用服务器性能监视和调整(CPU负载高)

我刚刚被一家公司雇佣,老板给我一个performance问题要尽快解决。 在服务器端,我对Java EE没有任何经验。

让我开始我所了解的系统,仍然无法find解决scheme:

我们有一个Oracle应用服务器(10.1。 )和Oracle数据库服务器(9.2。 ),软件人员专门用JSF 1.2编写了一个大的J2EE项目(X项目),这个项目只用于Ajax。 他们在代码中积极使用PL / SQL。

所以,我们启动了应用程序服务器(Solaris机器),一切似乎都OK。 用户开始使用应用程序从星期一开始从不同的位置(应用程序200有用户帐户,我只是检查,看到连接池设置正确,会话是活动只有15分钟)。

经过一段时间(2天)后,CPU利用率变高,60%, 夜间仍然没有任何变化(此时在线用户数量接近1或2),甚至开始使用分配给其他应用的CPU服务器,因为他们释放如果我们不重新启动服务器,2天后利用率变为%90,应用程序是如此之慢,最终用户开始呼叫。

主要的问题是软件工程师说代码是明确的,系统和DBA经理说我们有正确的configuration,其他应用程序似乎没问题,为什么这个问题只发生在X应用程序。

我开始将数据库复制到testing平台,并将其升级到最新版本,如果存在错误,也与应用程序服务器(Weblogic)一样。 我只testing自己只有一个用户和weblogicpipe理面板,我可以跟踪线程并转储他们。 我注意到有一些线程显示为hogging 。 当我检查手册和控制跟踪我看到,它指示我行号码从一个.java文件调用PL / SQL代码。 软件工程。 说是的,我们有非常复杂的PL / SQL代码,但是与Application Server有什么关系呢? 这是数据库服务器的问题,我想他们是对的…

我知道这个问题有很多漏洞,我想详细介绍一下,但是我很欣赏你引导我的方式。

提前致谢 …

编辑:在CPU和内存中的服务器足以运行更复杂的应用程序

大量的PL / SQL调用应该阻塞线程 – 所以CPU使用率应该下降。

我的第一个调用缓慢的应用程序服务器的端口是检查GC日志 – 寻找频繁的主要集合(这表明要么内存泄漏,要么JVM只需要更多的内存)。

从厚的Oracle驱动程序切换到轻量级的jdbc驱动程序后,我所关心的系统变得更加稳定 – 虽然问题主要performance为容器崩溃。

日志应该是系统中任何问题的一个很好的指示 – 但是很大程度上取决于开发人员在那里写什么。 慢SQL可能导致连接池耗尽 – 请确保该池正在logging连接统计信息。 还要确保为JVM正确设置了ulimit。

由于您在DB层运行9i,因此您不具备AWRfunction – 您必须运行statspack(但是,这应该已经成为您的站点性能pipe理的标准做法),以确定DB中导致问题的原因。

性能逐渐下降表示应用程序中存在内存泄漏 – 通常这是由于对象没有被取消引用,因此有资格进行垃圾回收 – 即编程问题。 这应该从大多数Java分析工具中显而易见。

我注意到有一些线程显示为hogging

除非你用真实的工作量testing这个结果,否则结果几乎没有用。