В отсутствии альтернатив я попробовал грязный взлом: замена java
и javac
сценариями оболочки, которые гарантируют, что надлежащие аргументы передаются и позволяют мне видеть точный список параметров. Начиная с этого в уже попытке очень определенного решения и не части вопроса, я feld как помещение его в ответ.
Я искал все происшествия java
в моей файловой системе. Был путь ко многим, потому что у меня есть несколько JREs и JDKs на моей машине. Даже после удаления всех кроме одной версии, были все еще многие из них. Я использовал find / -name "java" |xargs file
узнать, который является реальным. Это сказало мне:
/var/lib/dpkg/alternatives/java: ASCII text
/etc/alternatives/java: symbolic link to `/usr/lib/jvm/java-6-sun/jre/bin/java'
/usr/share/java: directory
/usr/lib/jvm/java-6-sun-1.6.0.16/bin/java: symbolic link to `../jre/bin/java'
/usr/lib/jvm/java-6-sun-1.6.0.16/jre/bin/java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped
/usr/bin/java: symbolic link to `/etc/alternatives/java'
Таким образом, я знал это /usr/lib/jvm/java-6-sun-1.6.0.16/jre/bin/java
был исполняемый файл. Я переименовал его к javaexec
и помещенный сценарий оболочки в он - старое местоположение:
mv /usr/lib/jvm/java-6-sun-1.6.0.16/jre/bin/java /usr/lib/jvm/java-6-sun-1.6.0.16/jre/bin/javaexec
nano /usr/lib/jvm/java-6-sun-1.6.0.16/jre/bin/java
(see below for file contents)
chmod +x #!/bin/bash -e
Это гарантирует что каждый вызов к java
в конечных точках к моему сценарию, который назовет исполняемый файл с правильными параметрами. После этого я сделал подобные ужасные вещи к javac
. Содержание моего сценария:
#!/bin/bash -e
line=""
for i in $*
do
if [[ "$i" == *Xmx* ]]; then
echo "Seen -Xmx and removed"
elif [[ "$i" == *MaxPerm* ]]; then
echo "Seen -XX:MaxPermSize and removed"
else
line="$line $i"
fi
done
exec="/usr/lib/jvm/java-6-sun-1.6.0.16/jre/bin/javaexec -Xms10m -Xmx100m $line"
echo Now executing $exec
$exec
Это удаляет каждый параметр из командной строки, которая включает -Xmx
или что-то как -XX:MaxPermSize
и вставляет его собственный-Xms и пределы-Xmx.
Когда я теперь запускаю Tomcat, он все еще перестал работать, но наконец, JVM запускает, делает что-то и затем выходит со значимым сообщением. Никакой успех барабана, но это оставляет меня намного более удовлетворенным, с тех пор оттуда на, я знаю, что сделать. В то время как Tomcat все еще не работает, он имеет хороший побочный эффект:
Теперь я могу наконец звонить java
или javac
на командной строке или из сценария, и они не отказывают, который прежде не был возможен вообще! Они просто работают! Эй, я чувствую себя подобно королю слова, я наконец заставил Java работать на машине с 44 ГБ Ram без complaing о недостаточно памяти. Это - великий день в истории вычислений, действительно!
Просто в стороне: аналитические инструменты Журнала, которые не понимают Сервер ISA, будут иметь тенденцию запрашивать с пользователей чрезмерную цену, особенно потому что они не включают/исключают количества данных на основе объектных исходных значений журнала.
Если Вы соглашаетесь с моделью ISP (имейте кэш, обвините многих людей за загрузки даже с кэша, прибыли!) затем это не могло бы быть недостатком :)