You guys need to be careful with non static ThreadLocals.

ClassMethodIndexer has a non static ThreadLocal.

threadLocals will create a hashEntry somewhere deep in the JDK.
Depending on the number of tests that are running you guys may break
things like ReadWriteLock because it will transverse a lot of entries.
(I have been bitten by this before).


Also, I have a reproducer:


git clone https://github.com/clebertsuconic/surefire-reproducer.git
cd surefire-reproducer
mvn install



This little project is using check-leak to count the number of
instances of ClassObject. I have set the assertions as max 20
instances. I have a copy&paste test that is validating this over and
over.


And it's always leaking inside a ConcurrentHashMap that's being held
by ClassMethodIndex which is used by JUnit4Listener.



and you guys should really stop using non static ThreadLocals.. I have
found another case where it was used but at least the remove was
called.. but still a bit scary to my test (It should just use a static
final... what's the point of a ThreadLocal if it's not static on a
class an associated to the instance?)




Should I open a JIRA about this?

On Mon, Jul 10, 2023 at 2:13 PM Clebert Suconic
<clebert.suco...@gmail.com> wrote:
>
> We have recently upgraded surefire into artemis  from 2.x, and
> strangely our testsuite started to crash because of memory.
>
>
> So, it happens that I had other memory leaks in the past and I became
> addicted into finding them, up to a point that I created a project
> that will track memory usage over a java app, or be used on test cases
> to make sure leaks are not happening:
>
>
> https://github.com/check-leak/check-leak
>
>
> So,
>
>
> I ran this testsuite from artemis:
>
> git clone g...@github.com:apache/activemq-artemis.git
> cd activemq-artemis
> mvn install -DskipTests=true
> cd tests/integration-tests
> mvn -Ptests tests
>
>
>
> get check-leak:
> curl 
> https://github.com/check-leak/check-leak/releases/download/0.11/check-leak-0.11.jar
>
> so after finding the process ID for the surefire:
> java -jar check-leak-0.11.jar --sleep 5000 --pid <surefire-pid>
> --report ./report-leak
>
>
>
> As the test progress, open ./report-leak/index.html
>
>
> you may refresh the page as the process go.
>
>
> and if you look at the objects  allocations for
> org.apache.maven.surefire.api.util.internal.ClassMethod, the
> allocations are only growing after the lates version, and never being
> released.
>
>
>
>
> is there any idea about what might be causing it?
>
>
> if you have a big project with many tests like I do, memory
> allocations may be an issue and I would need to use a bigger VM just
> because of this probably leak.



-- 
Clebert Suconic

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to