Eclipse с SonarLint аварийно завершает работу, когда OutOfMemory работает с конкретными проблемными классами. - PullRequest
0 голосов
/ 15 мая 2018

Я работаю с eclipse в Windows 7, и после ответа предложил SonarLint для отлова проблемного кода, я установил его, и он работает нормально (99%).

У меня теперь естьпроблема со специфическими унаследованными классами со слишком многими проблемами сонара (10K строк плохого кода).

Eclipse продолжает работать при работе с этими файлами, OutOfMemoryError исключение в журнале:

!ENTRY org.eclipse.osgi 4 0 2018-05-14 15:10:40.524
!MESSAGE Application error
!STACK 1
java.lang.OutOfMemoryError: Java heap space

!ENTRY org.eclipse.core.jobs 4 2 2018-05-14 15:10:40.526
!MESSAGE An internal error occurred during: "SonarLint analysis of file MyJava.java".
!STACK 0
java.lang.OutOfMemoryError: Java heap space

!ENTRY org.eclipse.e4.ui.workbench 4 0 2018-05-14 15:10:51.220
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.eclipse.e4.core.di.InjectionException: org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:65)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:966)
    at org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:426)
    at org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:154)
    at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:78)
    at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:111)
    at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.handleInvalid(TrackableComputationExt.java:74)
    at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:176)
    at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:161)
    at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:106)
    at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:139)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:903)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112)
    at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:156)
    at org.eclipse.osgi.container.Module.publishEvent(Module.java:476)
    at org.eclipse.osgi.container.Module.doStop(Module.java:634)
    at org.eclipse.osgi.container.Module.stop(Module.java:498)
    at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:202)
    at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:165)
    at java.lang.Thread.run(Unknown Source)

Я не нашел способа исключить файлы в плагине sonarlint.

Есть ли способ по-прежнему работать с SonarLint и обрабатывать такие файлы или есть другой подход / плагин?

Я пытался добавить -XX:+UseCompressedOops, но это не помогло.другая конфигурация:

-Xms512m
-Xmx1024m

1 Ответ

0 голосов
/ 18 мая 2018

Вы в правильном направлении.У нас также есть файлы Uber, содержащие более 10 тыс. Строк кода в наших проектах / CR.

Решение в нашем случае было простым - увеличить максимальный размер кучи JVM до 4 ГБ:

-Xms512m
-Xmx4096m

Это решило проблему для файла с плохим кодом 13K, который был причиной исключения java.lang.OutOfMemoryError с нашей стороны (с использованием Eclipse Oxygen).

Альтернативные решения?Вы можете настроить SonarLint так, чтобы он не сканировал автоматически каждый класс Java, который вы открываете в редакторе.Таким образом, вы можете вручную выбрать сканы и избежать сканирования больших файлов.

Я рекомендую увеличить размер кучи до 4 ГБ, а затем на моей рабочей станции будет 16 ГБ памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...