taming the oacore jvm session id - oatug

101
Session ID: Prepared by: Remember to complete your evaluation for this session within the app! 10886 Taming the OACore JVM April 10, 2019 Ahmed Alomari Cybernoor Corporation cybernoor.com

Upload: others

Post on 17-Oct-2021

7 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Taming the OACore JVM Session ID - OATUG

Session ID:

Prepared by:

Remember to complete your evaluation for this session within the app!

10886Taming the OACore JVM

April 10, 2019

Ahmed Alomari

Cybernoor Corporation

cybernoor.com

Page 2: Taming the OACore JVM Session ID - OATUG

Agenda

• Architecture

• JVM Tuning

• Java Object Cache (JOC)

• Applications Connection Pool

• OA Framework

• Thread Dumps

• Heap Dumps

• Q & A

Page 3: Taming the OACore JVM Session ID - OATUG

Architecture

Page 4: Taming the OACore JVM Session ID - OATUG

R12.2 Architecture

Page 5: Taming the OACore JVM Session ID - OATUG

R12.2 Architecture

• R12.2 uses Oracle Fusion Middleware (11gR1)

• WebLogic Server (WLS) -10.1.3.6

• WebLogic JSP Compiler and Engine 11.1.1.9

• Dual File System (FS1 & FS2) – Run and Patch Filesystems

• ADOP (online Patching) utility

• 64 bit Java Support

– Can deploy Managed servers with larger heaps such as 8GB

– Useful for components with large memory footprints

• Oracle Configurator

• Reporting

• Large number of online users

• New Middle Tier Code level checker (MT –ETCC)

Page 6: Taming the OACore JVM Session ID - OATUG

Terminology

• JVM – Java Virtual Machine

• JRE – Java Runtime Environment

• JDK – Java Development Kit

• Java SE – Java Standard Edition

• Java EE – Java Enterprise Edition

• Java ME – Java Micro Edition

• Hotspot – Oracle (Sun’s) VM Implementation

➢Server VM and Client VM

• JNI - Java Native Interface (Native Applications)

Page 7: Taming the OACore JVM Session ID - OATUG

Terminology

• JSP - Java Server Pages

➢Web pages which can embed Java, JavaScript, and/or HTML. Usually compiled into a servlet.

➢Located in $OA_HTML

• JDBC – Java Database Connectivity

➢ Interface for SQL execution for Java Applications.

• Servlets – Server side Java code used to interact with Web based applications.

➢Configurator

➢ iPayment

➢AppsLogin

Page 8: Taming the OACore JVM Session ID - OATUG

Terminology

• Applet – Client side Java code such as Java code which runs inside a browser [JRE Plug-in or Java Web Start (JWS)]

• Oracle WebForms

• javac – Compiler used to compile java source code files into class files (i.e. byte code).

• JAR – Java Archive

➢Typically used to package an Application including class files, configuration files, properties, manifest, etc..

• Manifest – Descriptor file

• JAR Signing

➢Attach a digital signature to the JAR file in order to improve security.

Page 9: Taming the OACore JVM Session ID - OATUG

Terminology

• Class file

➢Well-defined format of compiled Java source (i.e. byte code).

• Package

➢Allows class files to be organized into a hierarchy

• java.lang

• java.util

• oracle.apps.fnd.common

• Class hierarchy

➢oracle.apps.fnd.common.WebAppsContext →

• $JAVA_TOP/oracle/apps/fnd/common/WebAppsContext.class

Page 10: Taming the OACore JVM Session ID - OATUG

Terminology

• JDK Vendors

➢Oracle – Linux, Solaris, Windows, macOS

➢ IBM – AIX, Linux, z/OS, Windows

➢HP – HP UX

➢JRockit - Linux, Solaris, Windows

➢Extended Support ended December 2018

➢Oracle JVM – DB Server platforms.

Page 11: Taming the OACore JVM Session ID - OATUG

Terminology

• Web Container

➢A Java Application Server which provides

deployment and runtime services

➢JSP engine

➢Pooling Services

➢Thread Pool

➢JDBC Connection Pool

➢Security

➢Logging

➢Transaction Management

➢Cluster Services

Page 12: Taming the OACore JVM Session ID - OATUG

Terminology

• Web Container

➢Oracle Containers for J2EE (OC4J)

➢Oracle WebLogic

➢ IBM WebSphere

➢Apache Tomcat

➢RedHat JBoss

➢GlassFish

Page 13: Taming the OACore JVM Session ID - OATUG

Architecture

Page 14: Taming the OACore JVM Session ID - OATUG

Architecture• HotSpot VM / Mixed-Mode VM

➢ Compiles “hot” classes using thresholds and other criteria into native machine code.

• Oracle HotSpot VM provides Client and Server compilers.

• -server• -client

➢ Uses background thread (CompilerThread0)• To perform compilation.

➢ Switch -XX:+PrintCompilation can be used to report compilation activity including method names.

• java.lang.String::charAt (33 bytes)• java.lang.String::hashCode (60 bytes)

Page 15: Taming the OACore JVM Session ID - OATUG

Architecture

Page 16: Taming the OACore JVM Session ID - OATUG

Architecture

.

• Java Object Life Cycle

Page 17: Taming the OACore JVM Session ID - OATUG

Architecture

• Finalizers

➢ Object has been declared unreachable.

➢ The finalize() method on the object is invoked.

Page 18: Taming the OACore JVM Session ID - OATUG

Architecture

• Leaks

try {

webAppsCtx = new WebAppsContext(l_dbc);

requestType = httpservletrequest.getParameter("requestType");

String jvm_url =

webAppsCtx.getProfileStore().getProfile("APPS_FRAMEWORK_AGENT");

webAppsCtx.createAnonymousSession();

connection = webAppsCtx.getJDBCConnection();

. . . . . . .

} catch (Exception e)

{

MessageErrorHandler(e);

}

Page 19: Taming the OACore JVM Session ID - OATUG

Architecture

• Garbage Collection

➢ Process of re-claiming memory for objects which are

either no longer reachable (i.e. strong reference cleared)

or object reference type permits collection.

➢ Memory leaks in Java are due to references which are not

cleared such as adding objects to a collection without

removing the entry or setting the reference to null.

• Connection leaks

• Cursor leaks

• Data Structure leaks (hash tables, hash maps, other

collection types, etc..)

➢ For example, cursor leaks are fixed by calling the close()

method on the statement object (i.e. reference is cleared

therefore making the object collectable).

Page 20: Taming the OACore JVM Session ID - OATUG

Architecture

• Garbage Collection

➢ The JVM provides various collectors based on the heap

being collected as well as the JVM configuration options.

➢ Garbage Collection can be monitored via the following

switches:

• -verbosegc

• Enables GC messages

• -XX:+PrintGCDetails

• Records heap level details of GC event

• -Xloggc

• Redirects GC messages to a dedicated log file

• Can use tools to open the GC log file and plot the data

points.

Page 21: Taming the OACore JVM Session ID - OATUG

Architecture

• Collectors➢ Serial Collector (-XX:+UseSerialGC)

➢ Parallel New Space Collector

• -XX:+UseParallelGC / -XX:ParallelGCThreads

➢ Concurrent Collector (CMS)

• -XX:+UseConcMarkSweepGC

• Tries to minimize GC Pause times for stop the world collections.

• CMS optimal for old generation collections as well as Applications which require a large permanent footprint (i.e. large data caches).

• Much more efficient than the conventional Full GC.

➢ Garbage First (G1) Garbage Collector – 1.7+

• Successor to CMS

• -XX:+UseG1GC

• Utilizes compaction

• Divides heap into regions rather than by generation.

Page 22: Taming the OACore JVM Session ID - OATUG

Architecture

• Java Heaps (-Xmx/-Xms)➢ Xmx (maximum heap size)

➢ -Xms (minimum heap size at startup)

• Heap segment is memory mapped or a shared memory segment is

created if large pages is used.

➢ Young Generation

• Eden (Nursery)

• NewRatio or NewSize/MaxNewSize

• Survivor Space

• Can be tuned via SurvivorRatio

➢ Tenured Generation (Old Generation)

➢ Meta Space heap (Permanent Generation)

• MaxMetaspaceSize (formerly PermSize and MaxPermSize)

• -XX:MetaspaceSize / -XX:MaxMetaspaceSize

• Code Cache (classes)

• Constants

• Intern strings

Page 23: Taming the OACore JVM Session ID - OATUG

Architecture

• Java Heaps (-Xmx/-Xms)

➢ Total OS memory size will be the sum of the value of:

• Xmx + MaxMetaspaceSize + Thread Stacks + Control

Structures

➢ Gather and review verbose GC data to optimally size the

JVM heaps.

• Need to understand the permanent memory footprint (i.e.

tenured generation footprint after caches are loaded and

steady state achieved).

• Need to understand object creation and allocation rates.

• Need to understand lifespan of transient objects.

• Need to understand user level concurrency traffic as well as

end-user response time SLAs.

• Choose optimal collector based on above data points.

Page 24: Taming the OACore JVM Session ID - OATUG

Infrastructure Tuning

Page 25: Taming the OACore JVM Session ID - OATUG

Infrastructure Tuning

• Ensure kernel/shell limits are set sufficiently as per

the load.

• Low settings can result in JVM errors, hangs, or

OutOfMemoryError(s).

• /etc/security/limits.confaebizprd hard core unlimited

aebizprd hard nofile 131072

aebizprd hard nproc 131072

aebizprd soft core unlimited

aebizprd soft nofile 131072

aebizprd soft nproc 131072

Page 26: Taming the OACore JVM Session ID - OATUG

Infrastructure Tuning

• Ensure optimal performance of NAS device and the

shared application filesystem (NFS)

• OHS and JVM logs and output files (runtime)

• JVM performance is impacted due to NAS latency.

• Utilize NFS V4 for application file system mounts

• Ensure NAS device supports V4

• nas-app-prod:/app01 on /app01 type nfs4

(rw,relatime,vers=4.0,rsize=64k,wsize=64k,namlen=2

55,soft,nordirplus, local_lock=none)

Page 27: Taming the OACore JVM Session ID - OATUG

Infrastructure Tuning

• Monitor CPU and memory utilization on the

application tier hosts.

• Top processes (by CPU and memory)

• Leverage EM grid or install OSWatcher.

• Monitor Entropy pool to ensure sufficient availabilityIf Entropy values are low or exhausted, the JVM can hang

with threads blocked waiting on random key generation.

applmgr> cat /proc/sys/kernel/random/entropy_avail

3520

applmgr> cat /proc/sys/kernel/random/entropy_avail

118

Might need to switch to /dev/urandom or use options to increase

Entropy availability.

Page 28: Taming the OACore JVM Session ID - OATUG

JVM Tuning

Page 29: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

• Ensure you are running a current version of the JDK as

well as current patch set.

JDK

Version

Current

Patchset

MetaLink Note Applications

Version

6.0 Update 211

(28414647)

2244851.1

1459546.1 (12.2)

Extended Support ended 12/2018

7.0 Update 211

(28916517)

1467892.1 (12.1)

1530033.1 (12.2)

12.1.3 /12.2.X

8.0 Update 202

(28916765)

393931.1 (R12) JRE

Page 30: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

• JDK 7.0 New Features

➢ Invokedynamic instruction for dynamic languages.

➢ Garbage-First (G1) Garbage Collector.

➢ Improved Class loading

➢ Parallel ClassLoader

➢ try with block

➢ java.lang.AutoCloseable

➢ Tiered Compilation

➢ -XX:+TieredCompilation

➢ Compressed Ordinary Object Pointers

➢ -XX:+UseCompressedOops

➢ NUMA Aware Collectors

➢ -XX:+UseNUMA

➢ Switch statement can reference String Objects as expressions.

➢ ThreadLocalRandom

➢ Improve performance of random number generators.

Page 31: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

• JDK 1.5 JVM monitoring tools

➢ jps

➢ jstat

➢ jconsole

➢ jmap (utility to obtain heap information)

• JDK 1.6

➢ jhat (Memory Analysis tool)

➢ jmap enhanced to specify heap dump file name/path.

➢ JDK 1.7

➢ jcmd (diagnostic commands utility)

➢ jvisualvm (JVM monitoring tool)

➢ JDK 1.8

➢ jmc (Java Mission Control)

Page 32: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

➢ jvisualvm (JVM monitoring tool)

Page 33: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

➢ jvisualvm (JVM monitoring tool)

Page 34: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

➢ jmc (Java Mission Control)

Page 35: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

➢ jmc (Java Mission Control) – Flight Recorder

Page 36: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

➢ jmc (Java Mission Control) – Flight Recorder

Page 37: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

• Set initial and max. heap sizes appropriately. Sizes

below are starting points and should be adjusted as per

the load and footprint.

Usage Model Recommended Starting Heap

Size

Small Xms/Xmx=1G

Medium Xms/Xmx=3-4G

Large Xms/Xmx=6-8G

Page 38: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

• Add sufficient managed servers across the app-tier nodes to handle the load.

• Minimum two OACore managed servers per app tier host.

• Ensure sufficient CPU and memory exist to support two managed servers plus other processes.

• Use a hardware load balancer (VIP) to load balance the requests across the OACore managed servers.

• Refer to MOS 1905593.1.

perl <AD_TOP>/patch/115/bin/adProvisionEBS.pl \

ebs-create-managedserver -contextfile=<CONTEXT_FILE> \

-managedsrvname=oacore_server4 -servicetype=oacore \

-managedsrvport=21205 -logfile=<APPLRGF>/TXK/addMS_oacoreserver4.log

Page 39: Taming the OACore JVM Session ID - OATUG

Application Tier – Logging

• Set logging level to Notice (Severity Levels)• WebLogic Admin Console for oacore_server<n>

• Logging tab

Page 40: Taming the OACore JVM Session ID - OATUG

Application Tier – Logging

• Set logging level to Notice (Severity Levels)

➢ Review JVM log files for exceptions or errors

• 12.2: $EBS_DOMAIN_HOME/servers/oa*/logs/

• oacore_server2.out

• oacore_server2.log

• OPMN logs:• $IAS_ORACLE_HOME/instances/*/diagnostics/logs/OPMN/opmn

• 12.1: $INST_TOP/logs/ora/10.1.3/opmn/*oacore*• oacore_default_group_<n>

• oacorestd.out

• oacorestd.err• log4j:

• log4j.rootLogger=error, stdout, R

Page 41: Taming the OACore JVM Session ID - OATUG

Application Tier – JVM

• Enable verbose GC

➢ $INST_TOP/ora/10.1.3/opmn/conf/opmn.xml (12.1)

• -verbose:gc

• -XX:+PrintGCTimeStamps

• -XX:+PrintGCDetails

➢ Direct verbosegc output to a specific file

• 12.1: $INST_TOP/admin/scripts/java.sh

• -Xloggc:$JVMLOGDIR/oacore.gc.$$

• 12.2: WebLogic Admin Console

• Configuration->Server Start->Arguments

Page 42: Taming the OACore JVM Session ID - OATUG

Application Tier - JVM

263888.839: [GC [PSYoungGen: 378131K->9061K(393280K)] 1175648K->807594K(1212480K), 0.0249310 secs] [Times:

user=0.19 sys=0.01, real=0.02 secs]

264062.955: [GC [PSYoungGen: 385509K->2107K(392768K)] 1184042K->807774K(1211968K), 0.0263420 secs] [Times:

user=0.24 sys=0.00, real=0.02 secs]

264062.982: [Full GC[Unloading class sun.reflect.GeneratedMethodAccessor443]

[PSYoungGen: 2107K->0K(392768K)] [PSOldGen: 805666K->247375K(819200K)] 807774K->247375K(1211968K) [PSPermGen:

54677K->53972K(71680K)], 2.6600860 secs] [Times: user=2.63 sys=0.03, real=2.66 secs]

264164.928: [GC [PSYoungGen: 376448K->5127K(393600K)] 623823K->252503K(1212800K), 0.0142250 secs] [Times:

user=0.10 sys=0.00, real=0.01 secs]

264273.025: [GC [PSYoungGen: 382215K->2381K(393088K)] 629591K->252854K(1212288K), 0.0193010 secs] [Times:

user=0.13 sys=0.00, real=0.02 secs]

264393.122: [GC [PSYoungGen: 379469K->11043K(392320K)] 629942K->262082K(1211520K), 0.0258080 secs] [Times:

New Space

GC

Elapsed Time

Size Before

GC Size After

GC

Perm. Gen

Type of GC

• Review verbose GC data

Page 43: Taming the OACore JVM Session ID - OATUG

Application Tier – JVM

• Jstat• S0C Current survivor space 0 capacity (KB).

• S1C Current survivor space 1 capacity (KB).

• S0U Survivor space 0 utilization (KB).

• S1U Survivor space 1 utilization (KB).

• EC Current eden space capacity (KB).

• EU Eden space utilization (KB).

• OC Current old space capacity (KB).

• OU Old space utilization (KB).

• PC Current permanent space capacity (KB).

• PU Permanent space utilization (KB).

• YGC Number of young generation GC Events.

• YGCT Young generation garbage collection time.

• FGC Number of full GC events.

• FGCT Full garbage collection time.

• GCT Total garbage collection time.

• jstat -gc 298291; jstat -gcutil 298291

• S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC

FGCT GCT

• 294400.0 303616.0 0.0 141953.0 6370816.0 1796791.0 13981696.0 2371051.0 1048576.0 194275.0 49

8.497 0 0.000 8.497

• S0 S1 E O P YGC YGCT FGC FGCT GCT

• 0.00 46.75 28.20 16.96 18.53 49 8.497 0 0.000 8.497

Page 44: Taming the OACore JVM Session ID - OATUG

Application Tier – Session Timeout

• Set the served session timeout to 30 minutes

➢12.2: Set the profile “ICX:Session Timeout”

➢12.1: orion-web.xml

• <session-timeout>30</session-timeout>

• AutoConfig: s_oc4j_sesstimeout

• WebLogic: timeout-secs (1800)

➢Larger timeout values increase overall JVM

memory footprint.

Page 45: Taming the OACore JVM Session ID - OATUG

Application Tier – Web Applications

• Ensure the users are trained to use the Logout or Home global buttons

when completing their transactions.

• Ensure users do not use the browser close (“x”) link.

• Logging out gracefully releases the memory and corresponding

resources (i.e. connections, etc..)

• Avoids memory leaks and timeout based invalidation.

Page 46: Taming the OACore JVM Session ID - OATUG

Java Object Cache (JOC)

Page 47: Taming the OACore JVM Session ID - OATUG

Application Tier – JOC

• Java Object Cache (JOC) is an Middleware Component

which provides a caching framework for Java based

applications.

• E-Business Suite uses JOC for many of the core caches:

• Page Metadata Cache (MDS)

• FND Caches

• Menus

• Responsibilities

• Profiles

• Function Security

Page 48: Taming the OACore JVM Session ID - OATUG

Application Tier - JOC

• JOC Provides local caching (i.e. per JVM) as well as

distributed caching (i.e. all JVMs)

• Java System Property LONG_RUNNING_JVM

specifies the caching behavior

• TRUE – Distributed Caching

• FALSE – Local Caching

• LONG_RUNNING_JVM is set in oacore properties file

via the AutConfig context variable

s_long_running_jvm

Page 49: Taming the OACore JVM Session ID - OATUG

Application Tier - JOC

• JOC Distributed Caching

– Endpoint Receiver thread is created on all OACore

JVMs, GSM JVMs, and XML Services JVMs

– Receives cache update messages

– Listens on Cache Port

• s_java_object_cache_port (AutoConfig)

• Profile: JTF_DIST_CACHE_PORT

• Creates several threads in each JVM

– EndPointConnection

– Ack Processor

– Packet Sender

– CL Packet Processor

Page 50: Taming the OACore JVM Session ID - OATUG

Application Tier - JOC

• JOC Distributed Caching

• Endpoint Receiver thread receives cache update messages.

"EndPointConnection CL-65 to DI-3 at [10.16.240.16:22128]" daemon prio=10

tid=0x00007fd691dcf000 nid=0x3fe5 runnable [0x00007fd677dfc000]

java.lang.Thread.State: RUNNABLE

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(SocketInputStream.java:153)

at java.net.SocketInputStream.read(SocketInputStream.java:122)

at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)

at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)

at java.io.BufferedInputStream.read(BufferedInputStream.java:334)

- locked <0x00000007f55b4600> (a java.io.BufferedInputStream)

at oracle.ias.cache.groupv2.HttpHandler.read(HttpHandler.java:167)

- locked <0x00000007f55b4648> (a oracle.ias.cache.groupv2.HttpHandler)

at

oracle.ias.cache.groupv2.EndPointConnection.receive(EndPointConnection.java:383)

at oracle.ias.cache.groupv2.EndPointConnection.run(EndPointConnection.java:214)

Page 51: Taming the OACore JVM Session ID - OATUG

Application Tier - JOC

• Monitor JOC log file for exceptions/errors

➢ $APPLRGF/javacache.log*

➢ Memory leaks and JVM instability can occur if JOC loses

contact with other JVMs.

➢ NoClassDef errors involving the Profiles class can occur

during user login if JOC errors occur.

• Check firewall configuration/rules to account for the Cache port

as well as external nodes (DMZ).

Page 52: Taming the OACore JVM Session ID - OATUG

Application Tier - JOC

• Java Object Cache Full Exception:

oracle.ias.cache.CacheFullException: J2EE JOC-017 The cache is full.

at oracle.ias.cache.CacheHandle.findObject(CacheHandle.java:1682)

at oracle.ias.cache.CacheHandle.locateObject(CacheHandle.java:1120)

at oracle.ias.cache.CacheAccess.get(CacheAccess.java:877)

at oracle.apps.jtf.cache.IASCacheProvider.get(IASCacheProvider.java:771)

at oracle.apps.jtf.cache.CacheManager.getInternal(CacheManager.java:4802)

at oracle.apps.jtf.cache.CacheManager.get(CacheManager.java:4624)

at oracle.apps.fnd.cache.AppsCache.get(Unknown Source)

at

oracle.apps.fnd.profiles.Profiles.getProfileOptionValue(Profiles.java:1714)

• Increase JOC Cache sizes via javacache.xml underneath

$EBS_DOMAIN_HOME

• Change From: max-objects="5000" max-size="10“

• Change To: max-size=”1000″ max-objects=”5000000″

Page 53: Taming the OACore JVM Session ID - OATUG

Apps Connection Pool

Page 54: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Apps Connection Pool (dbc configuration)

➢ Enable sanity checks in production environments

• FND_JDBC_USABLE_CHECK=true

➢ Start with a reasonable default such as 300.

• FND_JDBC_MAX_CONNECTIONS=300

➢ Tune FND_JDBC_MAX_CONNECTIONS as per the amount of user concurrency (per JVM).

➢ Apps automatically decays idle connections and resizes the pool

Page 55: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Apps Connection Pool – Enable Test Connection• WebLogic->Configuration->EBSDataSource->Connection Pool-

>Advanced

Page 56: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Apps Connection Pool (dbc configuration)

➢ Apps Supports the use of Services for RAC load balancing or

failover.

• dbc parameter APPS_JDBC_URL

APPS_JDBC_URL=jdbc\:oracle\:thin\:@(DESCRIPTION\=(LOAD_BALANCE\=YES)(FA

ILOVER\=YES)(ADDRESS_LIST\=(ADDRESS\=(PROTOCOL\=tcp)(HOST\=db1host)(POR

T\=24601))(ADDRESS\=(PROTOCOL\=tcp)(HOST\=db2host)(PORT\=24601)))(CONNE

CT_DATA\=(SERVICE_NAME\= ebizprodOA)))

Page 57: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Apps Connection Pool Monitoring (12.1)

➢ Use the AOL/J Database Connection Pool

Status Page to monitor the connection pool

status.

• System Administration Responsibility

• AOL/J Database Connection Pool Status

(Function)

Page 58: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Apps Connection Pool Monitoring (12.1)

➢ Use the AOL/J Database Connection Pool

Status Page to monitor the connection pool

status.

• Lists DBC configuration parameter settings.

• Connection Statistics

• Locked Connections

• Available Connections

• Closed Connections

• Allows drill-downs to determine source of the

connection.

Page 59: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• AOL/J Database Connection Pool Status Page (12.1)

Page 60: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• AOL/J Database Connection Pool Status Page (12.1)

Page 61: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• WebLogic Connection Pool Monitoring (12.2)

• WebLogic Console->Data Source->Monitoring-

>Statistics

Page 62: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Process Identification (GV$SESSION)

• Allows you to map the JDBC session from v$session to a particular JVM

process.

SID MACHINE PROCESS MODULE LOGON

---- ------------------------- ------------ ------------------ -----------------

41 aptier1.us.oracle.com 23806 JDBC Thin Client 04/08/19 17:26:43

42 aptier2.us.oracle.com 2723 JDBC Thin Client 04/08/19 17:27:01

43 aptier3.us.oracle.com 4201 JDBC Thin Client 04/08/19 17:28:15

44 aptier1.us.oracle.com 23807 JDBC Thin Client 04/08/19 17:29:17

. . . . . . .

. . . . . . .

aptier1{apps_a}-> ps -ef | grep 23806

apps_a 23806 23804 53 17:26:40 pts/20 8:55 /R12/fs1/EBSapps/comn/util/jdk64/bin/java -

Dweblogic.Name=oacore_server2 -DCLIENT_PROCESSID=24314 -server -verbose:gc . . . . . . .

Page 63: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Monitor the number of JDBC connections for both

APPS and APPLSYSPUB to check for leaks or

excessive connection usage.

• General rule of thumb is that the total number of

connections should not exceed 2*<peak number of

users>.

➢ Keep in mind that each JVM will create ~10 connections for

background threads and bootstrapping at JVM startup time.

• Query GV$SESSION and group by module to

determine which modules are consuming the

connections.

Page 64: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Ensure Inactive Connection Timeout is set to zero (12.2).

• Only enable if debugging connection leaks, and reset to

zero after collecting debug logs.

• A non-zero values can actually create additional connection

leaks due to the WebLogic Shrink activity.

Page 65: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• Ensure Deadman detection is enabled in sqlnet.ora for

the DB listener

• $TNS_ADMIN/sqlnet.ora

• SQLNET.EXPIRE_TIME= 10

• If not enabled, connections can hang due to TCP timeouts,

firewall rules, abnormal connection terminations, etc..

• Ensure sqlnet.ora entry is present for all relevant listeners

used by the application:

• DB listener (AutoConfig instance listener directory)

• GI/ASM listeners

• Scan listener

Page 66: Taming the OACore JVM Session ID - OATUG

Application Tier – Connection Pool

• 12.2 Connection Leaks

• Check MOS for latest patches

• Shipping: Patch 27508480

• WebADI: MOS 2141923.1

• Payroll: Patch 22684327

• FND: Patch 26599059 and 28831943

• Ping Database checks: Patches 25969099 and 20141119

Page 67: Taming the OACore JVM Session ID - OATUG

OA Framework

Page 68: Taming the OACore JVM Session ID - OATUG

68

Database

OA Framework

JDBC

Statement Cache

Apps

Connection Pool

MDS

Metadata Cache

BC4J

Metadata Cache

Data Cache

UIX

HTML Generation

JSP Engine

OA.jsp / OAP.jsp

Module Code

Controller Object

http

OA Framework Architecture

Page 69: Taming the OACore JVM Session ID - OATUG

OA Framework Architecture

• Java Server Page Source (JSPs)

➢$OA_HTML

• Java Server Page Cache

➢$COMMON_TOP/_pages

• Java Classes

➢$JAVA_TOP

Page 70: Taming the OACore JVM Session ID - OATUG

Java Server Pages (JSP)

• Java Server Page (JSP) Execution

➢Upon JSP invocation, the JSP page cache is

examined.

• If a cache entry exists, the JSP class is executed.

• If a cache entry does not exist, the JSP is

processed as follows:

• Translation (.jsp -> .java)

• Compilation (.java -> .class)

Page 71: Taming the OACore JVM Session ID - OATUG

Java Server Pages (JSP)

• OA.jsp

➢Centralized JSP which executes OA FWK based

pages such as the Home Page.

➢Uses redirection to render the relevant page.

• RF.jsp

➢Centralized JSP which is used to execute standard

web functions such as:

• Launching Oracle Forms

• Launching Certain Web pages

Page 72: Taming the OACore JVM Session ID - OATUG

OA Framework Architecture

• User navigates to the OA FWK Page such as iExpenses

or iProcurement

➢Page Metadata is read and loaded into the MDS

Cache

➢Controller Page Object is invoked

➢Controller Page Object invokes server side

components such as the Entity Object or View Object.

• About this Page link can be used to display page

components.

Page 73: Taming the OACore JVM Session ID - OATUG

Application Tier – About this Page

• About this Page link

Page 74: Taming the OACore JVM Session ID - OATUG

Application Tier – About this Page

• About this Page link (page definition details)

Page 75: Taming the OACore JVM Session ID - OATUG

Application Tier – About this Page

• About this Page link (personalization details)

Page 76: Taming the OACore JVM Session ID - OATUG

Application Tier – About this Page

• About this Page link – Technology Components

Page 77: Taming the OACore JVM Session ID - OATUG

Pool Monitor

Page 78: Taming the OACore JVM Session ID - OATUG

Application Tier – Pool Monitor

• Pool Monitor can be used to monitor the Framework Applications as well as the JVM utilization

• Application Module Pool

• Memory Utilization

• Servlet Sessions

• Navigation Path: Home>Settings->Diagnostics->Show Pool Monitor.

Page 79: Taming the OACore JVM Session ID - OATUG

Application Tier – Pool Monitor

• Pool Monitor Home Page

Page 80: Taming the OACore JVM Session ID - OATUG

Application Tier – Pool Monitor

• Pool Monitor – Application Module Pool

Page 81: Taming the OACore JVM Session ID - OATUG

Application Tier – AM Pooling

• Application Module (AM) Pool

➢AM Pooling can be enabled/disabled via the profile

“FND: Application Module Pool Enabled”

➢ If AM Pooling is disabled, the values for Creations

and Removals on the AM Pool Page of Pool Monitor

should be close.

➢ If AM Pooling is enabled, monitor Check-ins and

Check-Outs as well as the Available and Unavailable

counters to ensure AM instances are not being

leaked.

Page 82: Taming the OACore JVM Session ID - OATUG

Application Tier – WebLogic Console

• Managed Server Performance page

➢Monitor JVM metrics

➢Heap Utilization

➢Garbage Collections

➢Thread information

➢Stuck Threads

Page 83: Taming the OACore JVM Session ID - OATUG

Application Server – WebLogic Console

Page 84: Taming the OACore JVM Session ID - OATUG

Application Server – WebLogic Console

Page 85: Taming the OACore JVM Session ID - OATUG

Application Server – WebLogic Console

Page 86: Taming the OACore JVM Session ID - OATUG

WebLogic Tuning

• Monitor Thread and Connection Pools

• Thread Count

• Maximum number of connections

• JDBC Ping Check Tuning

• Consider disabling if connections are stable and not hard-closed due to

firewall or inactivity termination.• Test Connections On Reserve

• Test Frequency

• Enable JDBC Statement Caching• Test thoroughly and watch for cursor leaks

• Utilize Hardware Load Balancers in place of Web Server clustering

• Monitor Heap utilization and GC traffic

Page 87: Taming the OACore JVM Session ID - OATUG

WebLogic Tuning

• Monitor Long Running and Stuck Threads• Stuck Thread Max Time

• Stuck Thread Timer Interval

Page 88: Taming the OACore JVM Session ID - OATUG

Java Thread Dumps

Page 89: Taming the OACore JVM Session ID - OATUG

Application Tier – Thread Dumps

➢ Thread dumps show the stack trace for each thread

that is alive.

➢ To generate a thread dump, identify the process id of

the JVM process.

• Then, execute the following:

-kill –QUIT <pid>

➢ Thread dumps show deadlocks which can cause the

JVM to stop responding to user requests. If that’s the

case, the JVM should be restarted.

➢ Helps identify deadlocks, infinite loops, long running

queries submitted by the user, etc..

Page 90: Taming the OACore JVM Session ID - OATUG

Application Tier – Thread Dumps

➢ Thread dumps show the stack trace for each thread

that is alive.

➢ To generate a thread dump, identify the oacore

Managed Server name and click on the Dump Thread

Stacks button.

Page 91: Taming the OACore JVM Session ID - OATUG

Application Tier – Thread Dumps2019-04-09 14:58:31

Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.201-b11 mixed mode):

"Worker-5" daemon prio=10 tid=0x00007f17d402b000 nid=0x5e751 in Object.wait() [0x00007f1712bfd000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

at oracle.ias.cache.TaskQ.waitForWork(TaskQ.java:255)

- locked <0x0000000312f2f250> (a oracle.ias.cache.TaskQ)

at oracle.ias.cache.TaskQ.getTask(TaskQ.java:138)

- locked <0x0000000312f2f250> (a oracle.ias.cache.TaskQ)

at oracle.ias.cache.WorkerThread.run(ThreadPool.java:303)

"Worker-4" daemon prio=10 tid=0x00007f16f8023000 nid=0x5e750 in Object.wait() [0x00007f17397fc000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

at oracle.ias.cache.TaskQ.waitForWork(TaskQ.java:255)

- locked <0x0000000312f2f250> (a oracle.ias.cache.TaskQ)

at oracle.ias.cache.TaskQ.getTask(TaskQ.java:138)

- locked <0x0000000312f2f250> (a oracle.ias.cache.TaskQ)

at oracle.ias.cache.WorkerThread.run(ThreadPool.java:303)

"Worker-2" daemon prio=10 tid=0x00007f175d85a000 nid=0x5e6cb in Object.wait() [0x00007f1713ffe000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

at oracle.ias.cache.TaskQ.waitForWork(TaskQ.java:255)

- locked <0x0000000312f2f250> (a oracle.ias.cache.TaskQ)

at oracle.ias.cache.TaskQ.getTask(TaskQ.java:138)

- locked <0x0000000312f2f250> (a oracle.ias.cache.TaskQ)

at oracle.ias.cache.WorkerThread.run(ThreadPool.java:303)

Page 92: Taming the OACore JVM Session ID - OATUG

Application Tier – Thread Dumps

Found one Java-level deadlock:

=============================

"Thread-65103":

waiting to lock monitor 0x0813e334 (object 0xb4006318, a

oracle.jbo.common.ampool.SessionCookieImpl$SessionCookieLock),

which is held by "Thread-65088"

"Thread-65088":

waiting to lock monitor 0x0813e374 (object 0xb3fa1418, a org.apache.jserv.JServSession),

which is held by "Thread-65103"

Java stack information for the threads listed above:

===================================================

"Thread-65103":

at oracle.apps.fnd.framework.webui.OAHttpSessionCookieImpl.timeout(OAHttpSessionCookieImpl.java:607)

- waiting to lock <0xb4006318> (a oracle.jbo.common.ampool.SessionCookieImpl$SessionCookieLock)

at oracle.jbo.http.HttpSessionCookieImpl.timeout(HttpSessionCookieImpl.java:146)

at oracle.jbo.http.HttpContainer.fireTimeout(HttpContainer.java:512)

at oracle.jbo.http.HttpContainer.timeout(HttpContainer.java:232)

at oracle.jbo.http.HttpContainer.valueUnbound(HttpContainer.java:300)

at org.apache.jserv.JServSession.invalidate(JServSession.java:240)

- locked <0xb3fa1418> (a org.apache.jserv.JServSession)

. . . . . . . .

"Thread-65088":

at org.apache.jserv.JServSession.getValue(JServSession.java:293)

- waiting to lock <0xb3fa1418> (a org.apache.jserv.JServSession)

at oracle.jsp.provider.JspUniversalHttpRequest.getSession(JspUniversalHttpRequest.java:408)

at oracle.jsp.provider.JspRDRequest.getSession(JspRDRequest.java:144)

at oracle.jsp.provider.JspRDRequest.getSession(JspRDRequest.java:144)

at oracle.jsp.provider.JspRDRequest.getSession(JspRDRequest.java:144)

at oracle.jsp.provider.JspRDRequest.getSession(JspRDRequest.java:144)

at oracle.jsp.provider.JspRDRequest.getSession(JspRDRequest.java:144)

. . . . . . . .

Page 93: Taming the OACore JVM Session ID - OATUG

Application Tier – Thread Dumps

• Java Thread dump output (standard out)

➢12.2:

$EBS_DOMAIN_HOME/servers/oacore_server<n>/lo

gs/oacore_server<n>.out

➢12.1:

• $INST_TOP/logs/ora/10.1.3/opmn/default_group~o

acore~default_group*

• What should you look for?

➢Deadlocked threads.

➢Threads stuck in an infinite loop.

• Check to see if the stack is changing.

Page 94: Taming the OACore JVM Session ID - OATUG

Java Heap Dumps

Page 95: Taming the OACore JVM Session ID - OATUG

Application Tier – Heap Dumps

• Java Heap Dumps

➢Useful when trying to debug memory leaks,

excessive footprint/garbage collection, and/or

OutofMemoryErrors.

➢There are two types of heap dumps:

• Summary (histogram of all class instances and

shallow size)

• Full heap dump (complete dump of the entire

Java heap) which includes old generation and

permanent generation.

-Can result in very large files depending on the

heap sizes.

Page 96: Taming the OACore JVM Session ID - OATUG

Application Tier – Heap Dumps

• Java Heap Dumps – Summary Heap Dump

➢Summary (histogram of all class instances and

shallow size)

• Can be generated using jmap

• jmap -histo:live <pid>

• Can be generated using a thread dump (kill -3) if

the JVM switch (-XX:+PrintClassHistogram) is

present. The summary histogram will be rewritten

to the oacore*.stdout log files (by default).

Page 97: Taming the OACore JVM Session ID - OATUG

Application Tier – Heap Dumps

• Java Heap Dumps - Summary Heap Dumpnum #instances #bytes class name

----------------------------------------------

1: 21437694 686006208 com.sun.java.util.collections.HashMap$Entry

2: 5553282 646005184 [C

3: 19853550 476485200 oracle.apps.cz.dio.FieldCache

4: 615172 218915592 [Lcom.sun.java.util.collections.HashMap$Entry;

5: 315197 143264864 [B

6: 5539474 132947376 java.lang.String

7: 1453342 81990664 [Ljava.lang.Object;

8: 1545022 61800880 java.math.BigDecimal

9: 341887 54284456 <constMethodKlass>

10: 2119195 50860680 java.lang.Long

11: 341887 43778960 <methodKlass>

12: 283528 40828032 oracle.apps.cz.dio.model.DbBomOptionClass

13: 29342 37480752 <constantPoolKlass>

14: 615172 34449632 com.sun.java.util.collections.HashMap

15: 1004869 32155808 java.sql.Timestamp

16: 1124467 26987208 com.sun.java.util.collections.ArrayList

17: 1120206 26884944 java.lang.Double

18: 839012 26848384 EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap$Entry

19: 600378 24015120 oracle.apps.cz.utilities.LongHashMap$Entry

20: 29342 23976200 <instanceKlassKlass>

Page 98: Taming the OACore JVM Session ID - OATUG

Application Tier – Heap Dumps

• Java Heap Dumps – Summary Histogram

– Quick to generate (several seconds)

• -XX:+PrintClassHistogram (and kill -3) is much faster

than jmap because it uses the native signal handler to

dump the heap.

– Good place to start when debugging leaks as it can help

you narrow down which objects are growing and which

objects consume the most memory.

• Once you have narrowed down the suspect objects, a

full heap dump can be generated to identify the root

cause and examine the reference graph.

Page 99: Taming the OACore JVM Session ID - OATUG

Application Tier – Heap Dumps

• Java Heap Dumps – Full Heap Dump– Dumps all live objects to a heap dump file usually in hprof

format.

– Can be generated using jmap• jmap -heap:format=b <pid>

– Trigger a heap dump when an OutofMemoryError occurs

• -XX:+HeapDumpOnOutOfMemoryError

• -XX:HeapDumpPath=<path>

– Use Memory Profiling tools to analyze the heap dump:

• jhat (part of JDK)

– Can also compare two heap dumps which will help narrow down the objects which continue to grow

• Eclipse Memory Analyzer (MAT)

• NetBeans IDE (Memory Profiler)

Page 100: Taming the OACore JVM Session ID - OATUG

References

• https://docs.oracle.com/javase/8/docs

• http://www.oracle.com/technetwork/tutorials/tutorials

-1876574.html

• http://www.oracle.com/technetwork/java/index.html

• http://bugs.java.com/bugdatabase

• http://www.oracle.com/technetwork/java/javase/docu

mentation/index.html

• http://www.oracle.com/technetwork/java/javaseprod

ucts/mission-control/java-mission-control-

1998576.html

Page 101: Taming the OACore JVM Session ID - OATUG

Session ID:

Remember to complete your evaluation for this session within the app!

Taming the OACore JVM

10886

[email protected]