Можно ли показать больше подробного кластерного журнала? Администратор почты отказывает произвольно? Которые кодируют, это возвращается к ОС? Сколько кластеров PostgreSQL Вы имеете, только 8.4/основных?
Что относительно Вашего kernel.shmall и kernel.shmmni? Попытайтесь использовать ipcs-ml, ipcs-m и проверить Вашу память (свободный, лучший, Системный монитор) использование. Попытайтесь успокоить уничтожителя OOM:
vm.overcommit_memory = 2
vm.overcommit_ratio = 50
AFAIK sysctl -w
не изменяет параметрические усилители постоянно (только до следующей перезагрузки ОС), и необходимо добавить kernel.shmmax=367108864
к/etc/sysctl.conf.
Если возможное обновление Ваш PostgreSQL к 8.4.8, как предложено в политике Управления версиями:
Мы всегда рекомендуем, чтобы все пользователи работали, последний доступный незначительный выпуск для любой основной версии используется.
Я думаю, что это - вероятно, уничтожающая проблема OOM, потому что она уничтожает администратора почты с сигналом SIGKILL и не освобождая общую память. Взгляд на документацию:
Важный: лучше не использовать SIGKILL для закрытия сервера. Выполнение так будет препятствовать тому, чтобы сервер освободил общую память и семафоры, которые, возможно, затем придется сделать вручную, прежде чем новый сервер может быть запущен. Кроме того, SIGKILL уничтожает процесс пост-ГРЭС, не позволяя этому передать сигнал к его подпроцессам, таким образом, будет необходимо уничтожить отдельные подпроцессы вручную также.
и здесь:
n Linux 2.4 и позже, поведение виртуальной памяти по умолчанию не оптимально для PostgreSQL. Из-за способа, которым ядро реализует память, принимают на себя непосильные обязательства, ядро могло бы завершить сервер PostgreSQL (процесс главного сервера), если требования памяти другого процесса заставляют систему исчерпывать виртуальную память.
BTW max_connections являются "дешевыми". Скорее уменьшите shared_buffers.
Основное отличие заключается в концепции интерактивности . Это похоже на выполнение команд локально внутри сценария, а не на ввод их самостоятельно. Он отличается тем, что удаленная команда должна выбирать значение по умолчанию, а неинтерактивный режим является наиболее безопасным. (и обычно самый честный)
Ctrl-c
обычно приводит к немедленному прерыванию цикла команды ssh, ваши управляющие последовательности вместо этого будут отправлены на удаленный сервер. Это приводит к необходимости «забивать» нажатие клавиши, чтобы гарантировать, что оно поступит, когда элемент управления покидает команду ssh, но до начала следующей команды ssh. Я бы предостерегал от использования ssh - t
в автоматических скриптах, таких как crons. Неинтерактивная оболочка, запрашивающая у удаленной команды интерактивное поведение при вводе, вызывает всевозможные проблемы.
Вы также можете проверить наличие терминала в ваших собственных сценариях оболочки. Чтобы протестировать STDIN с более новыми версиями bash:
# fd 0 is STDIN
[ -t 0 ]; echo $?
ssh
на ssh -t
, вы можете ожидать получить дополнительный возврат каретки в конце строки. Возможно, вам это не видно, но оно есть; он будет отображаться как ^ M
при перенаправлении на cat -e
. Затем вы должны приложить дополнительные усилия, чтобы этот управляющий код не был назначен вашим переменным, особенно если вы собираетесь вставить этот вывод в базу данных. Вот тот же тест bash, что и раньше, но для STDOUT:
# fd 1 is STDOUT
[ -t 1 ]; echo $?
Хотя это можно обойти проблемы, вы неизбежно забудете создавать сценарии на их основе. Все мы в какой-то момент понимаем. Члены вашей команды могут также не осознавать / помнить, что этот псевдоним существует, что, в свою очередь, создаст для вас проблемы, когда они напишут сценарии, использующие ваш псевдоним.
Псевдоним ssh
to ssh -t
в значительной степени тот случай, когда вы нарушите принцип наименьшее удивление ; люди будут сталкиваться с проблемами, которых они не ожидают, и могут не понимать, что их вызывает.
Вот тот же тест bash, что и раньше, но для STDOUT:
# fd 1 is STDOUT
[ -t 1 ]; echo $?
Хотя эти проблемы можно обойти, вы неизбежно забудете разрабатывать сценарии на их основе. Все мы в какой-то момент понимаем. Члены вашей команды также могут не осознавать / помнить, что этот псевдоним существует, что, в свою очередь, создаст для вас проблемы, когда они напишут сценарии, использующие ваш псевдоним.
Псевдоним ssh
to ssh -t
в значительной степени тот случай, когда вы нарушите принцип наименьшее удивление ; люди будут сталкиваться с проблемами, которых они не ожидают, и могут не понимать, что их вызывает.
Вот тот же тест bash, что и раньше, но для STDOUT:
# fd 1 is STDOUT
[ -t 1 ]; echo $?
Хотя эти проблемы можно обойти, вы неизбежно забудете разрабатывать сценарии на их основе. Все мы в какой-то момент понимаем. Члены вашей команды также могут не осознавать / помнить, что этот псевдоним существует, что, в свою очередь, создаст для вас проблемы, когда они напишут сценарии, использующие ваш псевдоним.
Псевдоним ssh
to ssh -t
в значительной степени тот случай, когда вы нарушите принцип наименьшее удивление ; люди будут сталкиваться с проблемами, которых они не ожидают, и могут не понимать, что их вызывает.
Псевдоним ssh
to ssh -t
в значительной степени тот случай, когда вы нарушите принцип наименьшее удивление ; люди будут сталкиваться с проблемами, которых они не ожидают, и могут не понимать, что их вызывает.
Псевдоним ssh
to ssh -t
в значительной степени тот случай, когда вы нарушите принцип наименьшее удивление ; люди будут сталкиваться с проблемами, которых они не ожидают, и могут не понимать, что их вызывает.
Подумайте об обратной совместимости.
Два основных режима ssh - интерактивный вход с tty и указанная команда без tty, потому что это были точные возможности rlogin
и rsh
соответственно. ssh должен был предоставить расширенный набор функций rlogin
/ rsh
, чтобы быть успешной в качестве замены.
Таким образом, значения по умолчанию были определены до того, как появился ssh. Комбинации типа «Я хочу указать команду и получить tty» должны быть доступны с новыми параметрами. Радуйтесь, что по крайней мере у нас есть эта опция, в отличие от того, когда мы использовали rsh
. Мы не отказались от каких-либо полезных функций для получения зашифрованных соединений. У нас есть бонусные функции!
Из man ssh
:
-t Force pseudo-tty allocation. This can be used to execute arbi-
trary screen-based programs on a remote machine, which can be
very useful, e.g. when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.
Это позволяет вам получить своего рода «оболочку» для удаленного сервера. Для серверов, которые не предоставляют доступ к оболочке, но разрешают SSH (например, Github - известный пример доступа по SFTP), использование этого флага приведет к тому, что сервер отклонит ваше соединение.
В оболочке также есть все ваши переменные среды (например, $ PATH
), поэтому для выполнения скриптов обычно требуется tty для работы.
Одно из преимуществ, которое не было упомянуто в других ответах, заключается в том, что при работе без псевдотерминала, такие экранирующие символы SSH ~C, как ~C
, не поддерживаются ; это делает безопасным передачу программ двоичных файлов, которые могут содержать эти последовательности.
Скопировать двоичный файл с помощью псевдотерминала:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Скопировать двоичный файл без использования псевдотерминала:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Два файла не одно и то же:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Повреждён тот, который был скопирован с помощью псевдотерминала:
$ chmod +x ~/free*
$ ./free
Segmentation fault
а другой нет:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Это особенно важно для таких программ, как scp
или rsync
, которые используют SSH для передачи данных. Это подробное описание того, как работает протокол SCP объясняет, как протокол SCP состоит из смеси текстовых сообщений протокола и данных двоичного файла.
Стоит отметить, что даже если используется флаг -t
, клиент OpenSSH ssh
откажется выделять псевдотерминал, если обнаружит, что его поток stdin
не является терминалом:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Вы всё равно можете заставить клиента OpenSSH выделить псевдотерминал с помощью -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
В любом случае, его (разумно) не волнует, если stdout
или stderr
будут перенаправлены:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.
На удаленном хосте мы имеем дело с этой настройкой:
/etc/sudoers
...
Defaults requiretty
Без sudo
$ ssh -T user@host echo -e 'foo\\nbar' | cat -e
foo$
bar$
И с sudo
$ ssh -T user@host sudo echo -e 'foo\\nbar' | cat -e
sudo: sorry, you must have a tty to run sudo
С sudo мы получаем дополнительный возврат каретки
$ ssh -t user@host sudo echo -e 'foo\\nbar' | cat -e
foo^M$
bar^M$
Connection to localhost closed.
решение - отключить перевод новой строки в перевод каретки-новую строку с помощью stty -onlcr
$ ssh -t user@host stty -onlcr\; sudo echo -e 'foo\\nbar' | cat -e
foo$
bar$
Connection to localhost closed.