[ https://issues.apache.org/jira/browse/ZOOKEEPER-4502?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kezhu Wang resolved ZOOKEEPER-4502. ----------------------------------- Resolution: Duplicate > Memory leaks: SyncRequestProcessor objects leak when leader election occurred > ----------------------------------------------------------------------------- > > Key: ZOOKEEPER-4502 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4502 > Project: ZooKeeper > Issue Type: Bug > Components: quorum > Affects Versions: 3.6.3, 3.7.0 > Reporter: xiongjianbo > Priority: Critical > > After a three-node ZooKeeper cluster runs for a period of time, OutOfMemory > occurs. Check the memory stack and find that the number of > SyncRequestProcessor objects is over 400. > > > Check the previous modification records. It is found that the > Learner.shutdown logic is modified this time. > [https://github.com/apache/zookeeper/pull/1619] > After the modification, the original invoking logic is changed. > Before modification: Learner.shutdown() -> LearnerZooKeeperServer.shutdown() > -> ZooKeeperServer.shutdown() > After modification: Learner.shutdown() -> ZooKeeperServer.shutdown(boolean) > Finally, LearnerZooKeeperServer.syncProcessor.shutdown() was never called. > > > Analysis by MAT: > 401 instances of {*}"org.apache.zookeeper.server.SyncRequestProcessor"{*}, > loaded by *"sun.misc.Launcher$AppClassLoader @ 0xfc000000"* occupy > *48,494,208 (40.02%)* bytes. > *Keywords* > org.apache.zookeeper.server.SyncRequestProcessor > sun.misc.Launcher$AppClassLoader @ 0xfc000000 > > > Follower shutdown logs: > 03-15 09:20:23,917 WARN > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (Follower:129) Exception when following the leader > java.io.EOFException: null > at java.io.DataInputStream.readInt(DataInputStream.java:393) > ~[?:1.8.0_322] > at > org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.java:96) > ~[zookeeper-jute-3.6.3.jar:3.6.3] > at > org.apache.zookeeper.server.quorum.QuorumPacket.deserialize(QuorumPacket.java:86) > ~[zookeeper-jute-3.6.3.jar:3.6.3] > at > org.apache.jute.BinaryInputArchive.readRecord(BinaryInputArchive.java:134) > ~[zookeeper-jute-3.6.3.jar:3.6.3] > at > org.apache.zookeeper.server.quorum.Learner.readPacket(Learner.java:221) > ~[zookeeper-3.6.3-h0.gdd.pub.r65.jar:3.6.3] > at > org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:125) > [zookeeper-3.6.3-h0.gdd.pub.r65.jar:3.6.3] > at > org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1480) > [zookeeper-3.6.3-h0.gdd.pub.r65.jar:3.6.3] > 03-15 09:20:23,918 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (Follower:143) Disconnected from leader (with address: /192.168.18.24:26311). > Was connected for 35683ms. Sync state: true > 03-15 09:20:23,918 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (Follower:292) shutdown Follower > 03-15 09:20:23,919 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (ZooKeeperServer:812) shutting down > 03-15 09:20:23,919 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (RequestThrottler:244) Shutting down > 03-15 09:20:23,919 INFO (RequestThrottler) (RequestThrottler:205) Draining > request throttler queue > 03-15 09:20:23,919 INFO (RequestThrottler) (RequestThrottler:181) > RequestThrottler shutdown. Dropped 0 requests > 03-15 09:20:23,920 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (FollowerRequestProcessor:148) Shutting down > 03-15 09:20:23,920 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (CommitProcessor:617) Shutting down > 03-15 09:20:23,920 INFO (FollowerRequestProcessor:1) > (FollowerRequestProcessor:112) FollowerRequestProcessor exited loop! > 03-15 09:20:23,920 INFO (CommitProcessor:1) (CommitProcessor:406) > CommitProcessor exited loop! > 03-15 09:20:23,928 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (FinalRequestProcessor:661) shutdown of request processor complete > 03-15 09:20:24,298 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (QuorumPeer:864) Peer state changed: looking > 03-15 09:20:24,298 WARN > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (QuorumPeer:1526) PeerState set to LOOKING > 03-15 09:20:24,298 INFO > (QuorumPeer[myid=1](plain=disabled)(secure=192.168.18.23:26310)) > (QuorumPeer:1396) LOOKING -- This message was sent by Atlassian Jira (v8.20.10#820010)