Groovy производительность на машине Linux
У меня проблема, когда я запускаю Groovy на одной из моих машин Linux - для выполнения очень простой команды требуется около 30 секунд:
groovy -e ""
если я бегу strace
на этом вот что я вижу, где он останавливается и ждет:
mprotect(0x7fae284e0000, 4096, PROT_NONE) = 0
clone(child_stack=0x7fae285dfff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fae285e09d0, tls=0x7fae285e0700, child_tidptr=0x7fae285e09d0) = 62660
futex(0x7fae285e09d0, FUTEX_WAIT, 62660, NULL <unfinished ...>
Есть ли способ выяснить, чего он ждет и почему и как это исправить?
Я использую Red Hat 6.3, Groovy Версия: 2.2.1 JVM: 1.7.0_25 Поставщик: Oracle Corporation ОС: Linux
И вот команда времени:
bin $ time groovy -e ""
реальный 0m22.255s пользователь 0m26.875s sys 0m2.064s
1 ответ
Причина очень длительного времени запуска groovy (по сравнению с другими интерпретируемыми языками) заключается в том, что он должен запускать JVM для каждого groovy
-command.
Вы можете посмотреть в GroovyServ. При первом запуске вы запускаете демон с JVM в фоновом режиме. Последующие звонки groovyclient
тогда используйте эту JVM вместо этого. Он обещает быть "в 10-20 раз быстрее, чем обычный Groovy".