A critical performance tuning
parameter for Oracle Service Bus (OSB) is the setting for RouterRuntimeCache.
The following article describes this parameter and the impact of changes
to it.
Main Article
Many customers start out with
smaller projects for an initial release. Typically, these applications
require 20-30 Proxy services. But as time goes on and later phases of the
project rollout, the number of proxy services can increase drastically.
The RouterRuntimeCache is a cache implemented by OSB to improve performance by
eliminating or reducing the amount of time spent on compiling the proxy
pipeline.
By default, OSB will not compile a
pipeline until a request message for a given service is received. Once it
has been compiled, the pipeline is cached in memory for re-use. You have
probably noticed in testing that the first request to a service takes longer to
respond than subsequent requests, and this is a big part of the reason.
Since free heap space is often at a premium, this cache can not be infinite in
size so this cache has a built in limit. When the cache is full, the
least recently used entry is released and the pipeline that is currently being
requested is placed into cache in its place. The next time a request
comes in for the service who’s pipeline was released, that pipeline has to be
re-compiled and placed in cache, again forcing out the least recently used
pipeline. Once a pipeline is placed in cache it is never removed from
cache unless forced out by a full cache scenario as above, or if the service is
updated, forcing it to be recompiled.
The default size limit of the
RouterRuntimeCache is 100 entries (or pipelines). It is limited by the
number of services in the cache, not the memory used by the cache so the amount
of memory used by a full cache will vary greatly based on the complexity of the
services, the extent and complexity of inline xquery, etc. If your
project grows beyond 100 proxy services, system performance can degrade
significantly if the cache size is not increased to hold all frequently used
services.
Unfortunately, the way to tune this
cache is not exposed through the OSB console. As of 11g PS5, the only way to
set this parameter is via a system property specified on the Java
command-line. The property name is com.bea.wli.sb.pipeline.RouterRuntimeCache.size. For example,
“java …
-Dcom.bea.wli.sb.pipeline.RouterRuntimeCache.size=500 …
weblogic.Server …”.
weblogic.Server …”.
In this example, OSB will cache 500
proxies, instead of the default 100. Because increasing the
RouterRuntimeCache.size value will require more space in the heap to hold the
additional proxies, be aware that you may need to reevaluate your JVM memory
settings to allow OSB to continue to perform optimally.
No comments:
Post a Comment