NotSerializable Exception

We are running OpenMRS 2.3.3 core using docker. Unfortunately, recently we have been experiencing very high CPU utilizations at certain times. During my investigation, I noticed this warning repeatedly in the log file.

01-Sep-2021 15:47:07.695 WARNING [localhost-startStop-2] org.apache.catalina.session.StandardSession.doWriteObject Cannot serialize session attribute [__open
mrs_user_context] for session [4F051A1F078559FE0A3AC94CBF0C69F1]
        java.io.NotSerializableException: org.openmrs.api.context.UsernamePasswordAuthenticationScheme
                at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
                at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
                at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
                at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
                at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
                at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
                at org.apache.catalina.session.StandardSession.doWriteObject(StandardSession.java:1702)
                at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1094)
                at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:312)
                at org.apache.catalina.session.StandardManager.unload(StandardManager.java:264)
                at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:379)
                at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
                at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5470)
                at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
                at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1439)
                at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1428)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
01-Sep-2021 15:47:07.695 WARNING [localhost-startStop-2] org.apache.catalina.session.StandardSession.doWriteObject Cannot serialize session attribute [__open
mrs_user_context] for session [40E3CC710291CBE145E4D5173F4AE157]
        java.io.NotSerializableException: org.openmrs.api.context.UsernamePasswordAuthenticationScheme
                at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
                at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
                at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
                at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
                at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
                at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
                at org.apache.catalina.session.StandardSession.doWriteObject(StandardSession.java:1702)
                at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1094)
                at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:312)
                at org.apache.catalina.session.StandardManager.unload(StandardManager.java:264)
                at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:379)
                at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
                at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5470)
                at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
                at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1439)
                at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1428)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
01-Sep-2021 15:47:07.696 WARNING [localhost-startStop-2] org.apache.catalina.session.StandardSession.doWriteObject Cannot serialize session attribute [__open
mrs_user_context] for session [E008E1DD054AC62AB68D3EEDEADF8384]

I am not sure if this can be the cause or one of the causes. It is obvious that Tomcat is trying to serialize a session object which has UsernamePasswordAuthenticationScheme which I think does not implement Serializable (I haven’t checked). Do I have to be worried about this in the context of high CPU utilization problem we are facing?

I do not think that you need to be worried about that. It is simply session persistence across system restarts, with UsernamePasswordAuthenticationScheme in your web session.

Did this start happening after installing a certain module?

1 Like