First of all let me thank you for this framework. It is really useful.
Now going on what matters, We have a neither simpler nor complex structure with lists and maps with generic objects getting mapped using dozer 5.2.2 to a most similar structure.
On heavy traffic, we get some random performance issues that get our CPU utilization up to 90%.
When we get such alert, we have proceeded to send a kill -3 to the process to see what might be running, and using another command i can't remember right now we see which of the threads is taking more CPU from the others.
Now getting all together we have seen that during this random scenarios all those threads that takes a lot of CPU are somehow stuck with the following stack trace (this was taken from the thread dump).
"http-8080-136" daemon prio=10 tid=0x00000000453cf800 nid=0x5019 runnable [0x00000000601f4000]
java.lang.Thread.State: RUNNABLE
at java.util.IdentityHashMap.get(IdentityHashMap.java:325)
at org.dozer.MappedFieldsTracker.getMappedValue(MappedFieldsTracker.java:47)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:359)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:320)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:266)
at org.dozer.MappingProcessor.map(MappingProcessor.java:235)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:460)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:423)
at org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:758)
at org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:816)
at org.dozer.MappingProcessor.mapListToList(MappingProcessor.java:665)
at org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:513)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:411)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:320)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:266)
at org.dozer.MappingProcessor.map(MappingProcessor.java:235)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:460)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:423)
at org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:758)
at org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:816)
at org.dozer.MappingProcessor.mapListToList(MappingProcessor.java:665)
at org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:513)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:411)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:320)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:266)
at org.dozer.MappingProcessor.map(MappingProcessor.java:235)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:460)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:423)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:320)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:266)
at org.dozer.MappingProcessor.map(MappingProcessor.java:235)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:460)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:423)
at org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:758)
at org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:816)
at org.dozer.MappingProcessor.mapListToList(MappingProcessor.java:665)
at org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:513)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:411)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:320)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:266)
at org.dozer.MappingProcessor.map(MappingProcessor.java:235)
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:460)
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:423)
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:320)
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:266)
at org.dozer.MappingProcessor.map(MappingProcessor.java:235)
at org.dozer.MappingProcessor.map(MappingProcessor.java:179)
at org.dozer.MappingProcessor.map(MappingProcessor.java:133)
at org.dozer.MappingProcessor.map(MappingProcessor.java:128)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:96)
I have seen the code and can't find exactly what might happening, I can tell you that we are using Sun JVM on a CentOS linux box:
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)
I will see to upgrade Dozer version to 5.3.2 but from what I have seen, there seems not to be any issue related from what I am experiencing, that's why I opened this ticket.
Can you help me or at least tell me what other things I can do to gather more information when this strange issue strikes again?.
Sorry, I am using 5.3.2, not 5.2.2 I updated the issue now. Bug is still happenning.
Ok, i found 2 issues, we were using version 5.2.2 instead of 5.3.2 (last minute override) and we fixed the concurrency problems with MapperAware singleton implementations. We are going to upload those changes on production environment to see if this error is gone.
View and moderate all "bugs Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Bugs"
Hello. I'm facing the same issue. Reproduced when I map JPA to POJO. Are there any way to solve this problem. May be someone know any workarounds?
javiercanillas has you experienced any success way to solve this problem?