Tomcat на виртуальном сервере: JVM не может запуститься, потому что 44 ГБ Ram недостаточно?

taskset (2.13-pre7 util-linux) использование: taskset [опции] [маска | список CPU] [pid | cmd [args...]] набор или получают привязку процесса

- p, - pid воздействует на существующий данный pid-c, - дисплей списка CPU и указывает CPU в формате списка-h, - справка отображает эту справку-v, - информация о версии вывода версии

Поведение по умолчанию состоит в том, чтобы выполнить новую команду: taskset 03 sshd-b 1024 можно получить маску существующей задачи: taskset-p 700 Или набор это: формат списка taskset-p 03 700 использует разделенный запятыми список вместо маски: taskset - ПК 0,3,7-11 700 Диапазонов в формате списка может взять аргумент шага: например, 0-31:2 эквивалентно маске 0x55555555

Вы можете alway оптимизировать Вас сервер как u r потребность

1
задан 20 December 2009 в 15:51
5 ответов

javac обычно порождает отдельный процесс, который должен упасть под различными правилами процесса.

-J опции для передачи args через обертку/средство запуска к JVM, я не видел это на Tomcat.

Узнайте, куда-Xmx прибывает из:

find /your/install/dir/with/tomcat |xargs grep '-Xmx'

1
ответ дан 4 December 2019 в 02:17
  • 1
    Привет Xepoch, я думаю, что Вы неправильно поняли меня или мою проблему: нет никакого-Xmx слишком много , что я хочу найти. Кажется, как будто-Xmx необходим для выполнения JVM, и когда стартовый Tomcat, также я мог так или иначе ввести-Xmx, это все еще, кажется, один-Xmx немногим , потому что я все еще получаю эту ошибку. Таким образом, я должен найти способ сказать JVM-Xmx на запуске Tomcat. –  Lena Schimmel 20 December 2009 в 14:07
  • 2
    Ohh, Вы были правы. Первоначально я искал способ поместить мой собственный-Xmx в аргументы Java. Теперь я успешно выполнился, но так как Tomcat добавляет свой собственный-Xmx, мой проигнорирован. Я попробовал Ваш поиск (который смотрит точно как, я создал бы его), бит он ничего не нашел. Я буду пытаться. –  Lena Schimmel 20 December 2009 в 14:39

В отсутствии альтернатив я попробовал грязный взлом: замена 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 о недостаточно памяти. Это - великий день в истории вычислений, действительно!

0
ответ дан 4 December 2019 в 02:17
  • 1
    Что-то еще неправильно. 44 ГиБ RAM я принимаю в 64 битах? Существуют большие причины использовать -XX:MaxPermSize & c, Вы won' t хотят проигнорировать их. –  Jé Queue 20 December 2009 в 16:59

Попытайтесь работать ulimit -v unlimited перед стартовым котом. Если это работает, можно, вероятно, добавить это к одному или обоим из сценариев запуска, или в /etc/profile, ~/.bashrc или некоторая другая оболочка представляет сценарий.

0
ответ дан 4 December 2019 в 02:17
  • 1
    Нет, этот doesn' t не работают ни один. ulimit-v неограниченные концы без вывода (который является, вероятно, intented), но также и без эффекта. Простой вызов к Java все еще перестал работать, и также - запуск Tomcat. Спасибо так или иначе. –  Lena Schimmel 20 December 2009 в 13:27
  • 2
    Только из любопытства, каков вывод ulimit -a? Очевидно, I' m согласился на него являющийся проблемой ulimit ;) –  violet 20 December 2009 в 15:25
  • 3
    Я отредактировал вывод ulimit-a в вопрос, так как я не думаю, что могу вставить его в комментарий, не становясь нечитабельным. –  Lena Schimmel 20 December 2009 в 15:52
  • 4
    Ой. Я потерял соединение с сервером и таким образом использовал ulimit-a на ly локальной машине. Теперь я выполнил его на фактическом сервере и переиздал вопрос показать правильный вывод. –  Lena Schimmel 20 December 2009 в 16:14

Вы могли также проверить Java vms, что Вы установили. Удостоверьтесь, это не gcj среда, это дает Вам проблемы.

попробовать

update-java-alternatives -l

видеть, является ли солнце-java6 Вашим значением по умолчанию. Отбросьте "-l" для наблюдения других опций для этой команды - например, как изменить значение по умолчанию.

Если я помню правильно, все проблемы Java, которые я имел на человечности, имели свой корень в gcj быть значением по умолчанию (это, возможно, вошло как некоторая зависимость до солнца-java6). Если я не помню правильно, это - по крайней мере, большинство проблем.

Наконец, что не менее важно, (и только связанный с Вашим вопросом): можно поместить файл, названный "setenv.sh" в каталог bin кота. Этот файл не там, но будет считан на запуске, если это может быть найдено. Можно внести все изменения здесь, чтобы обратиться к ним позже. Единственный незначительный недостаток, что они будут считаны на запуске, а также на завершении работы.

0
ответ дан 4 December 2019 в 02:17

После того как у меня была подобная проблема. Можно попробовать, запускают Java с

vm.overcommit_memory=1

набор в/etc/sysctl.conf. Или просто эхо "1" > /proc/sys/vm/overcommit_memory

Или игра с overcommit_memory, overcommit_ratio http://www.redhat.com/magazine/001nov04/features/vm/

0
ответ дан 4 December 2019 в 02:17

Теги

Похожие вопросы