82
#JCConf Ucxg"LXO"d{"[qwtugnh Tgcn"Yct"Gzrgtkgpegu"qh"QQO 檔蝵"*Ngqp"Ejgp+ Ctejkvgev."Ut0"Ocpcigt YV Oketqgngevtqpkeu ngqp0lejgpBiockn0eqo

Save JVM by Yourself: Real War Experiences of OOM

Embed Size (px)

Citation preview

Page 1: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 2: Save JVM by Yourself: Real War Experiences of OOM

••

••••••

Page 3: Save JVM by Yourself: Real War Experiences of OOM

••

Page 4: Save JVM by Yourself: Real War Experiences of OOM
Page 5: Save JVM by Yourself: Real War Experiences of OOM
Page 6: Save JVM by Yourself: Real War Experiences of OOM

••••

Page 7: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 8: Save JVM by Yourself: Real War Experiences of OOM
Page 9: Save JVM by Yourself: Real War Experiences of OOM

https://www.youtube.com/watch?v=450maTzSIvA

Page 10: Save JVM by Yourself: Real War Experiences of OOM
Page 11: Save JVM by Yourself: Real War Experiences of OOM
Page 12: Save JVM by Yourself: Real War Experiences of OOM
Page 13: Save JVM by Yourself: Real War Experiences of OOM

13

Page 14: Save JVM by Yourself: Real War Experiences of OOM
Page 15: Save JVM by Yourself: Real War Experiences of OOM
Page 16: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 17: Save JVM by Yourself: Real War Experiences of OOM
Page 18: Save JVM by Yourself: Real War Experiences of OOM
Page 19: Save JVM by Yourself: Real War Experiences of OOM

•–

••

–•

•–

Page 20: Save JVM by Yourself: Real War Experiences of OOM
Page 21: Save JVM by Yourself: Real War Experiences of OOM

A B

C

D E

F G

H

AandBaregarbagecollectionroots,(GCroots)

LeadingSet RetainedSetE E,GC C,D,E,F,G,HA,B A,B,C,D,E,F,G,H

Page 22: Save JVM by Yourself: Real War Experiences of OOM
Page 23: Save JVM by Yourself: Real War Experiences of OOM

A B

C

D E

F G

H

Page 24: Save JVM by Yourself: Real War Experiences of OOM

A B

C

D E

F G

H

Page 25: Save JVM by Yourself: Real War Experiences of OOM
Page 26: Save JVM by Yourself: Real War Experiences of OOM

A B

C

D E

F G

H

Page 27: Save JVM by Yourself: Real War Experiences of OOM
Page 28: Save JVM by Yourself: Real War Experiences of OOM

A B

C

D E

F G

H

Page 29: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 30: Save JVM by Yourself: Real War Experiences of OOM
Page 31: Save JVM by Yourself: Real War Experiences of OOM
Page 32: Save JVM by Yourself: Real War Experiences of OOM
Page 33: Save JVM by Yourself: Real War Experiences of OOM

Done

Page 34: Save JVM by Yourself: Real War Experiences of OOM

More Things…

Page 35: Save JVM by Yourself: Real War Experiences of OOM

Listobjects→withoutgoingreferences

Page 36: Save JVM by Yourself: Real War Experiences of OOM
Page 37: Save JVM by Yourself: Real War Experiences of OOM

oracle.jdbc.ScrollableResultSet →scrollStmt→sqlObject →sqlBytes →Copy→Value

Page 38: Save JVM by Yourself: Real War Experiences of OOM

SELECT*FROMPOP.PRMASTER,POP.PRITEM WHERE…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………..……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………Order ByPRITEM.IDOCNUMBERDESC,PRITEM.ITEM

Page 39: Save JVM by Yourself: Real War Experiences of OOM

MergeShortes PathstoGCRoots→excludeallphantom/weak/softetc.references

Page 40: Save JVM by Yourself: Real War Experiences of OOM
Page 41: Save JVM by Yourself: Real War Experiences of OOM

Listobjects→withoutgoingreferences

Page 42: Save JVM by Yourself: Real War Experiences of OOM

SortingbyClassName

Page 43: Save JVM by Yourself: Real War Experiences of OOM

java.lang.Thread→org.apache.catlina.connector.Request→postData →Copy→Value

Page 44: Save JVM by Yourself: Real War Experiences of OOM

sessionid=16F098C27D8DE1C8C7E58A15798C470A&applicantID=&hcreatorID=&applicantName …………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………..…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… KOLON_prodhier=K0

Page 45: Save JVM by Yourself: Real War Experiences of OOM

HTTPRequestAttributesorg.apache.catlina.connector.Request→attributes→table→java.util.HashMap$Entry

Page 46: Save JVM by Yourself: Real War Experiences of OOM

HTTPSessionDataorg.apache.catlina.connector.Request→session→attributes→segments→java.util.concurrent.ConcurrentHashMap$Segment

Page 47: Save JVM by Yourself: Real War Experiences of OOM

JavaBasics→ThreadOverviewandStacks

Page 48: Save JVM by Yourself: Real War Experiences of OOM
Page 49: Save JVM by Yourself: Real War Experiences of OOM

••

Page 50: Save JVM by Yourself: Real War Experiences of OOM

••

••

Page 51: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 52: Save JVM by Yourself: Real War Experiences of OOM

•–

•–

Page 53: Save JVM by Yourself: Real War Experiences of OOM
Page 54: Save JVM by Yourself: Real War Experiences of OOM
Page 55: Save JVM by Yourself: Real War Experiences of OOM
Page 56: Save JVM by Yourself: Real War Experiences of OOM
Page 57: Save JVM by Yourself: Real War Experiences of OOM

MergeShortestPathstoGCRoots→excludeallphantom/weak/softetc.references

Page 58: Save JVM by Yourself: Real War Experiences of OOM
Page 59: Save JVM by Yourself: Real War Experiences of OOM

Listobjects→withoutgoingreferences

Page 60: Save JVM by Yourself: Real War Experiences of OOM

Expandthenode

Page 61: Save JVM by Yourself: Real War Experiences of OOM

targetorg.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry

Page 62: Save JVM by Yourself: Real War Experiences of OOM

Using Log4j 2 in Web ApplicationsYou must take particular care when using Log4j or any other logging framework within a Java EE web application. It's important for logging resources to be properly cleaned up (database connections closed, files closed, etc.) when the container shuts down or the web application is undeployed. Because of the nature of class loaders within web applications, Log4j resources cannot be cleaned up through normal means. Log4j must be "started" when the web application deploys and "shut down"when the web application undeploys. How this works varies depending on whether your application is a Servlet 3.0 or newer or Servlet 2.5 web application.In either case, you'll need to add the log4j-webmodule to your deployment as detailed in the Maven, Ivy, and Gradle Artifacts manual page.

To avoid problems the Log4j shutdown hook will automatically be disabled when the log4j-web jar is included.

Page 63: Save JVM by Yourself: Real War Experiences of OOM
Page 64: Save JVM by Yourself: Real War Experiences of OOM

<classloader>org.apache.logging.log4j.core.jmx.StatusLoggerAdminMBean

Page 65: Save JVM by Yourself: Real War Experiences of OOM

Page 66: Save JVM by Yourself: Real War Experiences of OOM
Page 67: Save JVM by Yourself: Real War Experiences of OOM

•–

•–

Page 68: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 69: Save JVM by Yourself: Real War Experiences of OOM

••••

Page 70: Save JVM by Yourself: Real War Experiences of OOM

/* */ public abstract class ItemFactory/* */ implements Constants/* */ {/* */ protected static Logger a;/* 45 */ public Map b = null;/* */ public static int c;/* */ private static String[] A;/* *//* */ protected ItemFactory()/* */ {/* 51 */ this.b = Collections.synchronizedMap(new HashMap());/* 52 */ if ((ItemBean.d) || (a == null)) {/* 53 */ a = Logger.getLogger(A[2]);/* */ }/* */ }

Badnews:Itisobfuscated(混淆)Can’tdecompile,rewrite,andcompile…

Page 71: Save JVM by Yourself: Real War Experiences of OOM

•public aspect ItemFactoryAop {

private final static int DEFAULT_CACHE_SIZE = 100000;

after() : execution(workflow.ItemFactory.new()) {

((ItemFactory)thisJoinPoint.getThis()).b = Collections.synchronizedMap(

new cache.LruCache(DEFAULT_CACHE_SIZE));

}}

Page 72: Save JVM by Yourself: Real War Experiences of OOM

•–

•–

Page 73: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 74: Save JVM by Yourself: Real War Experiences of OOM

•••••

Page 75: Save JVM by Yourself: Real War Experiences of OOM
Page 76: Save JVM by Yourself: Real War Experiences of OOM
Page 77: Save JVM by Yourself: Real War Experiences of OOM
Page 78: Save JVM by Yourself: Real War Experiences of OOM

•–

Page 79: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 80: Save JVM by Yourself: Real War Experiences of OOM

•••

Page 81: Save JVM by Yourself: Real War Experiences of OOM

#JCConf

Page 82: Save JVM by Yourself: Real War Experiences of OOM

May Your JVMLive Long and Prosper