Реальное использование TCP_DEFER_ACCEPT?

Существует три частых причины для команд задания крона для поведения по-другому по сравнению с командами, введенными непосредственно в интерактивную оболочку в грубом порядке заурядности:

  • Крон обеспечивает ограниченную среду, например, минимальное $PATH, и другие ожидаемые пропавшие без вести переменных.
  • Крон вызывает /bin/sh по умолчанию, тогда как можно использовать некоторую другую оболочку в интерактивном режиме.
  • Крон рассматривает % символ особенно (это превращено в новую строку в команде).
  • Крон не обеспечивает терминальную или графическую среду.

Необходимо предшествовать всем % символы с a \ в crontab файле, который говорит крону просто помещать процент в команду. Помните это, когда Вы будете использовать date команда в задании крона.

55  8   *   *   3   /usr/bin/php /home/mark/dev/processes/customClient/events.php > "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
0   9   *   *   3   /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s "Events from $(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d)" -a "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"

Я также решил некоторые проблемы заключения в кавычки:

  • Это не вызывало Вас проблемы кроме с четкостью, но Вы не должны использовать обратные галочки для замены команды. Использовать $(…) вместо этого: его правила парсинга более просты.
  • Всегда используйте двойные кавычки вокруг переменной и управляйте заменами: "$somevariable", "$(somecommand)". Здесь отсутствие кавычек было безопасно потому что date управляйте никогда не возвращал специального символа для форматов, которые Вы использовали, но необходимо тщательно помнить, какие символы специальны и проверяют этот каждый раз, когда Вы уезжаете, замена закрыла кавычки. Сохраните это простым, всегда используйте двойные кавычки, если Вы не хотите, чтобы полевое разделение и поколение имени файла произошли на результате.
  • У Вас были некоторые одинарные кавычки, предотвращающие расширение вокруг некоторых замен команды. Используйте двойные кавычки вместо этого.
15
07.04.2014, 17:32
2 ответа

(для подведения итогов моих комментариев к OP)

Трехстороннее квитирование, к которому они обращаются, является частью установления соединения TCP, рассматриваемая опция не имеет отношение конкретно к этому. Также обратите внимание, что обмен данными не является частью трехэтапного квитирования, это просто создает соединение TCP в открытом/установленном состоянии.

Относительно существования этой опции это не традиционное поведение сокета, обычно поток обработчика сокетов разбужен, когда соединение принято (который является все еще после того, как трехэтапное квитирование завершается), и для некоторых протоколов действие запускается здесь (например, сервер SMTP отправляет 220 строк приветствия), но для HTTP первое сообщение в разговоре является веб-браузером, отправляющим ПОЛУЧАТЬ/POST/И Т.Д. строку, и пока этого не происходит, сервер HTTP не имеет никакого интереса к соединению (кроме таймаута его), таким образом будя Процесс HTTP, когда сокет принимает, завершается, расточительное действие, поскольку процесс сразу заснет, снова ожидая необходимых данных.

В то время как существует, конечно, аргумент, что пробуждение неактивных процессов может сделать их 'готовыми' к последующей обработке (я конкретно не забываю будить терминалы входа в систему на очень старых машинах и иметь их пыхтение в от подкачки), но можно также утверждать, что любая машина, которая выгрузила упомянутый процесс, уже требует у своих ресурсов и делает дальнейшие ненужные требования, мог бы в целом уменьшить производительность системы - даже если очевидная производительность отдельного потока улучшается (который это также не может, чрезвычайно занятая машина иметь узкими местами на диске IO, который замедлил бы другие вещи, если бы Вы загрузили, и если его настолько занятый, непосредственный сон мог бы подкачать его назад). Это, кажется, азартная игра, и в конечном счете 'жадная' азартная игра не обязательно окупается на занятой машине и конечно вызывает дополнительную ненужную работу над машиной, которой уже загрузили процесс - Ваш подход оптимизирует для машины с набором памяти большой емкости процессов, которые главным образом бездействуют, и свопинг одной дремоты для другого не является никаким грандиозным предприятием, однако машина с набором памяти большой емкости активных процессов пострадает от дополнительного IO, и любая машина, которая не является ограниченной памятью, страдает, любая зависящая от ЦП машина окажется в худшем положении.

Мои общие рекомендации относительно того уровня настройки производительности не состояли бы в том, чтобы принять программные решения относительно того, что является лучшим так или иначе, но позволить системному администратору и операционной системе сотрудничать, чтобы заниматься проблемами управления ресурсами - который является их заданием, и они намного лучше подходят для понимания рабочих нагрузок всей системы и вне. Дайте выбор конфигурации и опции.

Для специфического ответа на вопрос опция выгодна на всех конфигурациях, не к уровню, кроме которого Вы когда-либо, вероятно, замечали бы под экстремальной нагрузкой Трафика HTTP, но это - теоретически "правильный" способ сделать это. Это - опция, потому что не весь Unix (даже весь Linux) ароматы имеют ту возможность, и таким образом для мобильности это может быть настроено, чтобы не быть inclided.

14
27.01.2020, 19:50
  • 1
    Спасибо за большую сводку. В то время как загрузка сервера и подкачивающий/будящий неактивный процесс является одним потенциальным преимуществом (тот, который детален, как Вы упомянули), существуют ясные преимущества, которые будут иметься, при рассмотрении сервера HTTP, служащего высоким и низким клиентам задержки. Например, при выполнении веб-сервера Apache, постоянное число процессов/потоков сервера доступно, что означает, что постоянное число клиентов может быть подано в любой данный момент. Таким образом, “не израсходование” серверного процесса, в то время как пакет “данных” от клиента не прибыл, могло означать, что серверный процесс мог обслуживать другой клиент тем временем. –  Ram 13.01.2016, 05:09

Я неясен на том, каково преимущество для ожидания трехэтапного квитирования для завершения было бы.

Трехсторонние квитирования являются общим протоколом в речевой телефонии:

  1. Сервер: "Добрый день, Epiphyte Corp.".
  2. Вызывающая сторона: "Привет, это - Randy".
  3. Сервер: "Да, как я могу помочь Вам?"
  4. Вызывающая сторона: тело вызова начинает запрашивать шутку

Они важны в TCP для обеспечения, что канал устанавливается. Если Клиент начал отправлять тело вызова прежде, чем услышать (3) существует шанс, что Сервер не слушает или не готов. Слушание (3) не гарантирует, что Сервер сразу не перенес самовоспламенение после передачи, но это действительно увеличивает уверенность, что Сервер готов получить.

Как отмечено в Википедии на Квитировании:

  1. Alice [Сервер] отвечает с сообщением подтверждения с подтверждением номер y + 1, который получает Bob [Клиент] и на который он не должен отвечать.

Таким образом, если Вы готовы воздержаться от небольшой добавленной уверенности, что сервер готов, Сервер может пропустить шаг (3), и клиент просто предположит, что сервер был готов. Это поворачивает обмен протокола выше в:

  1. Сервер: "Добрый день, Epiphyte Corp.".
  2. Вызывающая сторона: "Привет, это - Randy".
  3. Вызывающая сторона: "Вы знаете какие-либо шутки о Imelda Marcos?"
-1
27.01.2020, 19:50
  • 1
    Это - больше, чем просто уверенность, Вы отправляете, перед 3way завершается, и Ваши данные сгруппированы. Путем соединения TCP настраиваются в современных стопках ОС нет на самом деле зарегистрированных таблиц никаких данных о соединении до 3-й части соединения, требование 3-го сообщения, прежде чем любые ресурсы будут использованы, сделано через использование "Cookie Syn" и предотвращает "Атаки SYN" (которые являются forged-source-ip пакетом квитирования 1. его пакет 3, который подрывает, который подделал исходный IP). Следовательно плоскость никакое соединение или запись для него существует перед этой точкой. спасибо –  iain 11.10.2013, 07:57
  • 2
    Слушание (3) не гарантирует, что Сервер сразу не перенес самовоспламенение после передачи, но это действительно увеличивает уверенность, что Сервер готов получить. –  msw 12.10.2013, 22:49
  • 3
    Увеличение? От нуля? Хорошо да, я предполагаю буквально это правда, но большинство людей подразумевало бы, что был/some/шанс перед пакетом 3 для увеличения. И нет. Это - просто фраза, "увеличивают уверенность", что мне не нравится, и я не думаю, включая в 'главные проблемы реального мира на 0,001%', помогает держать проблему в стороне. Несомненно, ядерная война могла бы произойти, прежде чем сервер получает пакет, много вещей могло произойти. –  iain 13.10.2013, 20:00
  • 4
    Также я просто взял в последнем абзаце, где Вы подразумеваете, что шаг 3 является дополнительным. Это не, абсолютно не. Перечитайте абзац, шаг 3 является "alice ответами с подтверждением". это не является дополнительным. боб, отвечающий на тот (теоретический 4-й шаг). –  iain 13.10.2013, 21:55

Теги

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