michigan oracle users summit 2020 - mous

Post on 04-May-2022

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MICHIGAN ORACLE USERS SUMMIT 2020MONDAY OCTOBER 26 – THURSDAY OCTOBER 29, 2020

VIRTUAL EVENT

Optimizing WebLogic and Maximizing

Application Uptime

Ahmed Alomari

Agenda

• Architecture

• OA Framework

• Infrastructure & JVM Tuning

• Applications Connection Pool

• Thread Dumps

• Heap Dumps

• Q & A

Architecture

R12.2 Architecture

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)

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)

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

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.

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

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.

➢GraalVM - Oracle

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

Terminology

• Web Container

➢Oracle Containers for J2EE (OC4J)

➢Extended support through June 2017

➢Oracle WebLogic

➢ IBM WebSphere

➢Apache Tomcat

➢RedHat JBoss

➢GlassFish (Open Source)

Architecture

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)

Architecture

Architecture

.

• Java Object Life Cycle

Architecture

• Finalizers

➢ Object has been declared unreachable.

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

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);

}

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).

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.

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.

– Z Garbage Collector (ZGC) – JDK 11• Low latency garbage collector

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

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.

OA Framework

26

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

OA Framework Architecture

• Java Server Page Source (JSPs)

➢$OA_HTML

• Java Server Page Cache

➢$COMMON_TOP/_pages

• Java Classes

➢$JAVA_TOP

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)

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

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.

Infrastructure Tuning

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

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)

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.

JVM Tuning

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

7.0 Update 281

(31856324)

1467892.1 (12.1)

1530033.1 (12.2)

12.1.3 /12.2.X

8.0 Update 271

(31856303)

393931.1 (R12) JRE

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.

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)

Application Tier - JVM

➢ jvisualvm (JVM monitoring tool)

Application Tier - JVM

➢ jvisualvm (JVM monitoring tool)

Application Tier - JVM

➢ jmc (Java Mission Control)

Application Tier - JVM

➢ jmc (Java Mission Control) – Flight Recorder

Application Tier - JVM

➢ jmc (Java Mission Control) – Flight Recorder

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

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

Application Tier – Logging

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

• Logging tab

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

Application Tier – JVM

• Enable verbose GC

– 12.2: WebLogic Admin Console

• Configuration->Server Start->Arguments

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

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

Application Tier – Session Timeout

• Set the served session timeout to 30 minutes

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

– WebLogic: timeout-secs (1800)

➢Larger timeout values increase overall JVM

memory footprint.

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.

Connection Pool

Application Tier – Connection Pool

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

>Advanced

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)))

Application Tier – Connection Pool

• WebLogic Connection Pool Monitoring (12.2)

• WebLogic Console->Data Source->Monitoring-

>Statistics

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 10/08/20 17:26:43

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

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

44 aptier1.us.oracle.com 23807 JDBC Thin Client 10/08/20 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 . . . . . . .

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.

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

Application Tier – WebLogic Console

• Managed Server Performance page

➢Monitor JVM metrics

➢Heap Utilization

➢Garbage Collections

➢Thread information

➢Stuck Threads

Application Server – WebLogic Console

Application Server – WebLogic Console

Application Server – WebLogic Console

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

WebLogic Tuning

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

– Stuck Thread Timer Interval

Java Thread Dumps

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..

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.

Application Tier – Thread Dumps2020-10-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)

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)

. . . . . . . .

Application Tier – Thread Dumps

• Java Thread dump output (standard out)

➢12.2: $EBS_DOMAIN_HOME/servers/oacore_server<n>/logs/oacore_server<n>.out

➢12.1:

• $INST_TOP/logs/ora/10.1.3/opmn/default_group~oacore~default_group*

• What should you look for?

➢Deadlocked threads.

➢Threads stuck in an infinite loop.

• Check to see if the stack is changing.

Java Heap Dumps

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.

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).

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>

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.

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)

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

www.mous.us

THANK YOU

SAVE THE DATE

• OATUG Forum LiveDecember 7-11, 2020

Virtual Event

https://forum.oatug.org

• MOUS 2021October 27, 2021

Schoolcraft College -VisTaTech Center,

18600 Haggerty Rd, Livonia, MI

WWW.MOUS.US

THANK YOU

SURVEYS

• Session SurveysPlease complete the session survey for this

session using the Zoom session survey link.

The survey link will be provided via email

once the webinar is closed.

Thank You Q & A

World Class Managed Services

Application Performance Management

Leader in Oracle Performance Tuning

Application Development and Integrations

Upgrades and Cloud Implementations

aalomari@cybernoor.com Ph: (925) 924-0400

top related