Показаны сообщения с ярлыком jvm. Показать все сообщения
Показаны сообщения с ярлыком jvm. Показать все сообщения

воскресенье, 4 марта 2012 г.

Сердцем чую, 32-битная jvm подводит

Решил выделить чуть больше памяти под jvm, чтобы sbt пошустрее работала. Максимальный размер data segment установлен в 700Mb. Соответственно, указание java выделять под heap больше памяти (параметр -Xmx) кладет ее в корку. Не вопрос, увеличим размер, разрешим выделять памяти побольше. Однако, увеличив параметр ядра kern.maxdsiz до 1200Mb, с удивлением обнаружил что jvm вообще отказывается стартовать, будто ей теперь все время не хватает памяти, при любом запрашиваемом размере хипа. Причем свободной памяти достаточно.
Уже который раз себе говорю, что как разгребусь с рутиной, обязательно назад переползу под 64-битную версию, чтобы впринципе устранить проблемы с адресацией, но все руки не доходят. Жаль только, что в старый ноут больше 4 гиг не влезет. В магазинах ноутовых планок ddr2 по 4 гига не нашел, а было бы неплохо.

UPDATE:
Оказалось, что большой размер data size приводит к тому, что java не может выделить mmap нужного размера, и валится в процессе инициализации vm (нашел перед тем, как самому расчехлить kdump). Так что размер своего data size прийдется закатать обратно.

понедельник, 18 апреля 2011 г.

Нужная книга

Для тех, кто хоть как-то касается языка Java (Closure, Scala, Groovy), книжка Брайана Гоетца "Java concurrency in practice" должна на время стать одной из настольных книг.
Достаточно широко охватывает проблемы, связанные с многопоточностью в Яве. Показывает как делать нужно, как не нужно, и чем это грозит (какой раскаленный и шершавый вам попадет в одно место, если налажаете). На ночь читать не рекомендую, потом будут мучать кошмары.

пятница, 11 июня 2010 г.

Не забываем о ресурсах

Готовый тестовый пример на Scala, c тредами. Создается 2000 тредов, которые делают что-то необременительное. Запускаю -- "java.lang.OutOfMemoryError: unable to create new native thread". Чудненько. Пляски вокруг параметров виртуальной машины не помогают, или наборот -- загоняют jvm в "корку".
Читаю документацию, ссылки, маны, пробую, комбинирую... температура (у меня и у проца) выросла еще на четыре градусов. Замечаю нюанс: ulimit во freebsd не показывает ограничения на кол-во тредов. В мане (bash) ключ "-T" есть, а в самой утилите -- нет. В линуксе, кстати, man правильнее, ключ там не указан.
И тут наступает прозрение.
sysctl kern.threads.max_threads_per_proc: 1500
Уменьшаю кол-во тредов до тысячи, работает. Поднимаю до полторы тысячи, перестает.

Меняю на max_threads_per_proc до 2000, и сразу все как по маслу.

Никогда програмисты сами не научатся создавать сообщения об ошибках, точно отражающие ситуацию, если их жестоко не пинать. По себе знаю. :(