I am using Weblogic 10.3.4 + Oracle DB both on Solaris machines (VM)
Unfortunately last week our app hosted on Weblogic became very very slow not being able to serve new users coming (everything lasted for 1h).
In order to find out the cause is we asked reports from the OS level , DB level.
The reports shown:
- a very intesive CPU usage that hour. (clearly was a peak from number of users using the system)
- Connection Pool reached the top limit on Weblogic (200 connections !)
- AWR stats from Db shown a degradation in response times.
NOW who was first the chicken or the egg ?
A very slow DB can cause WEBlogic to be slow and to reach the max numeber of connections from pool.
However if the CPU is very used , it might be that the threads holding the DB connections to be so busy that they do not return the connection to the pool (because the processor is busy)==> a new client comes a new connection is assgined and so on ...so the connection pool might be exhausted as well in this way ...?
Regards
Cris
High CPU usage is often caused by the java garbage collector that is trying to collect free memory in the JVM heap space, perm gen, etc. If this is the case, you need to add more memory, usually to JVM heap. See the
-Xmx
JVM option.When the CPU usage is high in a JVM, try to find out which thread(s) is(are) using the CPU. During the problem create 2-3 thread dumps with
pkill -3 java
. The thread dumps will be located (for Solaris) in/proc/<JVM_PID>/path/1
If the thread pool would reach its limit, you should see errors in the logs. The CPU usage should not rise because of this. It is an event driven environment and no need to do pooling.
Slow DB could actually lower the CPU usage on the application server. Depends on how the application is programmed/configured.