Обнаружилось, что есть проблемы у glibc, собранной под ядро 2.2.x, с ядром 2.4.x, по крайней мере на i686. Для меня это выражалось в падении (SIGSEGV) java из Sun J2SE 1.4.0 при выполнении программы ant. C glibc, собранной с --enable-kernel=2.4.18, падение не наблюдалось. В RedHat 7.1 предлагают ещё один трюк (см. <a href="http://www.redhat.com/support/manuals/RHL-7.1-Manual/release-notes/s1-known-issues.html">http://www.redhat.com/support/manuals/RHL-7.1-Manual/release-notes/s1-known-issues.html</a>): установить в окружении LD_ASSUME_KERNEL=2.2.5 чтобы выбрать устаревшую модель стека. Комментарии к багрепорту на сайте Sun (см. ниже) утверждают, что этого делать, наоборот, нельзя, а надо воспользоваться версией libpthread для i686, в которой включён floating stack. Утверждается, что в RedHat 7.1 есть две динамически выбираемые версии libpthread, для i386 и i686. --- --- <a href="http://developer.java.sun.com/developer/bugParade/bugs/4466587.html">http://developer.java.sun.com/developer/bugParade/bugs/4466587.html</a> (требует регистрации) <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=84093">http://bugzilla.mozilla.org/show_bug.cgi?id=84093</a>
Resolved with adding an optional package glibc-core-%_target_cpu, compiled with the CPU-specific features turned on. Wish it was not optionally enabled and separately built.
Не понял. Для решения проблемы достаточно было установить glibc-core-i686? В последний никаких изменений не вносилось?
Да, glibc-core-i686, без изменений, достаточно. Предыдущая bugnote сделана на публику :) P.S. Почему-то не проходит make ... tests в подкаталоге elf, хотя если запустить его вручную, всё OK.
Это значит, что jdk-sun-1.4.0 requires glibc-core-i686?
С Requires не всё ясно. j2sdk-sun-1.4.0_01 собирается под i586. Может быть, имеет смысл предоставлять виртуальную \"фичу\" оптимизированного glibc, которую требует JDK/JRE, типа, glibc(floating-stack)? Чтение багрепорта JDK (см. ссылку в описании выще) подсказывает, что для \"неулучшенной\" libpthread можно решить проблему установкой ulimit -s 2048. Сделать скрипт запуска java, который этим будет заниматься?
Если нет ничего лучше.
В итоге, что будем делать?
Выглядит как проблема комюинации JVM/libc/kernel: на jdk-1.4.1 были отзывы \"легче\"; с glibc-core-i686 -- отчетливо легче; на kernel24-linus-2.4.18-alt6 легче, чем на том же -up/-smp. Также прозвучало следующее: echo 0 > /proc/sys/vm/heap-stack-gap -- после этого SegFaultTest стало еще в раза в полтора легче (дольше прожил) и получился трейс. При этом кол-во итераций уперлось в 1024, судя по трейсу. Сегодя в sisyphus@. :-) PS: насчет ulimit -s 2048 -- не уверен. Оно by default на свежем сизифе стоит в 8192 и ->2048 -- _ухудшает_ ситуацию.
glibc-2.5-alt1 is built with --enable-kernel=2.6.9