Во-первых, вы без ума от того, что работаете с 32-битной ОС, когда у вас такое большое давление на адресное пространство. Миграция на 64-битную JVM в 64-битной Linux. Сколько времени вы уже потратили, пытаясь диагностировать эту проблему, которая, как вы подозревали, с самого начала могла бы уйти из-за большего адресного пространства 64-битной системы?
Во-вторых, хорошо известно, что из всех поставщиков Linux в Red Hat работает большинство инженеров-ядерщиков, и они вносят серьезные изменения в ядра в своих продуктах RHEL. Они часто включают исправления для больших рабочих нагрузок, подобных вашей (ну, это большая нагрузка для 32-битной системы, для 64-битной - ничего особенного). Таким образом, есть некоторый шанс, что в конечном итоге причина в том, что у RHEL есть другие клиенты, которые делают то же самое, что и вы, и вы получаете выгоду от работы, которую они проделали, чтобы поддержать этих клиентов.
И наконец, поскольку я подозреваю, что вы будете настаивать на попытке найти способ сделать это на 32-битной SuSE, я укажу, что Linux предлагает множество компромиссов в адресном пространстве на 32-битной x86, и возможно (но не обязательно), что в ваших системах SuSE выбран другой компромисс. Если вы можете вызвать конфигурацию запущенных ядер (часто в / boot / config ....), вы можете сравнить настройки, такие как HIGHMEM.
Обычный вариант, который несколько лет назад был разделен на 2: 2, то есть пользовательское пространство ограничено 2 ГБ адресного пространства, простое решение для программирования, и оно имеет приличную эффективность, но в этом сценарии, очевидно, вы не можете получить запрошенный куча, так как это не оставило бы места для текста программы, стека и т. д. В последнее время наблюдается тенденция к 3: 1 (аналогично переключателю Windows / 3GB), который расширяет адресное пространство пользовательского пространства за счет того, что само ядро ОС становится меньше. пространство, которое потенциально вызывает свои проблемы. Это может сработать, но это будет очень тесно, поэтому я также не удивлюсь, если это не сработает для вашей работы. Наконец, более новые ядра Linux также предлагают вариант, при котором вы получаете 32-битное пользовательское пространство 4 ГБ, которого может быть достаточно для надежной работы ваших заданий при значительных затратах на производительность, поскольку очевидно, что пользовательское пространство и адреса ядра не могут сосуществовать.
Чтобы попробовать это, вам понадобится новое ядро. Возможно, вам удастся просто установить один из них, предоставленный SuSE (посмотрите, предлагают ли они другие варианты, например, вариант «PAE»), или вам, возможно, придется скомпилировать свой собственный вариант, и в этом случае он, вероятно, лишит законной силы ваш контракт на поддержку.
Но на самом деле, вам просто нужно перейти с вариантом 1, переключиться на 64-битную JVM и поднять ноги.