log4j-detector icon indicating copy to clipboard operation
log4j-detector copied to clipboard

OutOfMemory for WSL and Windows

Open omicscoutspweber opened this issue 3 years ago • 8 comments

While starting the scan from /home/<username> On WSL running Ubuntu 20.04 an OutOfMemory occurs after starting hundreds of threads (my guess is for each recursive subdirectory) after a couple of minutes.

Running log4j-detector-2021.12.13.jar with java --version openjdk 11.0.11

        at com.mergebase.log4j.Bytes.resizeArray(Bytes.java:93)
        at com.mergebase.log4j.Bytes.streamToBytes(Bytes.java:56)
        at com.mergebase.log4j.Bytes.streamToBytes(Bytes.java:43)
        at com.mergebase.log4j.Log4JDetector.findLog4jRecursive(Log4JDetector.java:148)
        at com.mergebase.log4j.Log4JDetector.scan(Log4JDetector.java:307)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:332)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:328)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:328)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:328)
        at com.mergebase.log4j.Log4JDetector.main(Log4JDetector.java:72)```

omicscoutspweber avatar Dec 13 '21 10:12 omicscoutspweber

Same on my Windows machine: java -jar log4j-detector-2021.12.13.jar c:\

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at com.mergebase.log4j.Bytes.resizeArray(Bytes.java:93)
        at com.mergebase.log4j.Bytes.streamToBytes(Bytes.java:56)
        at com.mergebase.log4j.Bytes.streamToBytes(Bytes.java:43)
        at com.mergebase.log4j.Log4JDetector.findLog4jRecursive(Log4JDetector.java:153)
        at com.mergebase.log4j.Log4JDetector.scan(Log4JDetector.java:312)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:337)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.main(Log4JDetector.java:72)

aveXcaesar avatar Dec 13 '21 13:12 aveXcaesar

Did you try to give java more memory by adding -Xmx1024m as command line parameter?

jangatzke avatar Dec 13 '21 13:12 jangatzke

Use this to avoid out of memory errors: java -jar -Xmx1024m log4j-detector-2021.12.13.jar --verbose

drnimrod avatar Dec 13 '21 14:12 drnimrod

No! I will try it... Thx!

aveXcaesar avatar Dec 13 '21 14:12 aveXcaesar

Sorry, same problem. It needs some more time to crash now. I used the following call: java -jar -Xmx1024m log4j-detector-2021.12.13.jar c:\

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at com.mergebase.log4j.Bytes.resizeArray(Bytes.java:93)
        at com.mergebase.log4j.Bytes.streamToBytes(Bytes.java:56)
        at com.mergebase.log4j.Bytes.streamToBytes(Bytes.java:43)
        at com.mergebase.log4j.Log4JDetector.findLog4jRecursive(Log4JDetector.java:153)
        at com.mergebase.log4j.Log4JDetector.scan(Log4JDetector.java:312)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:337)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.analyze(Log4JDetector.java:333)
        at com.mergebase.log4j.Log4JDetector.main(Log4JDetector.java:72)

I think/hope the option --verbose has no impact to the problem.

aveXcaesar avatar Dec 13 '21 14:12 aveXcaesar

I limited the available memory to 1GB using the command java -jar -Xmx1024m log4j-detector-2021.12.13.jar --verbose /home/\<username\> . I can can confirm @aveXcaesar 's observation, that it now fails more quickly. The --verbose flag made no difference.

The failure happened while traversing a particular file that had more than 100MB in size.

omicscoutspweber avatar Dec 13 '21 16:12 omicscoutspweber

That make sense. With ´--verbose´ I can see that the last logged file as a size of 133MB.

aveXcaesar avatar Dec 13 '21 16:12 aveXcaesar

I added the Pull Request above to further improve OutOfMemory Handling ... Please fell free to share feedback :-)

phbreitbach avatar Jan 17 '22 17:01 phbreitbach