Re: poll() timeout в PHP-FPM при получении запросов от Nginx

2013-11-20 Пенетрантность Bogdan
Добрый день, спасибо за ответ.

2013/11/20 Eugene Berdnikov b...@protva.ru

 On Tue, Nov 19, 2013 at 11:58:33PM +0300, Bogdan wrote:
  Т.е. непонятно по какой причине poll() зависает на 5 секунд блокируя
 работу
  интерпретатора.

  Скорее всего, по той причине, что никаких данных по сети не приходит.



Не совсем тут понятно, что значит никаких данных по сети не приходит -
т.е. удалённая сторона, в данном случае nginx, установила tcp-соединение,
но данных в него не послала?

Сравнивал с нормальным режимом функционирования системы - там таких пауз
и близко не наблюдается. Вероятность отсуствия запроса в течении 5 секунд
при интенсивности порядка 1000-1500 запросов в секунуд мне кажется очень
маленькой. Рабочих процессов 64, ну максимум 128. Я тоже рассматриваю
проблему межсерверной сетью, но варианты какая-то проблема в ядре с одной
из сторон и nginx перестал посылать запросы пока не могу исключить.






 Вероятность проблемы может быть весьма высокой, например
  1/60, что при условии получения 1000-1500 запросов в секунду очень
  болезненно.
  Подскажите, куда дальше копать?

  Убедиться, что данных действительно нет, если в этом сомневаетесь.
  Т.е. tcpdump в руки и искать эту коннекцию.


Ну поискать-то в этом потоке будет весьма сложно, потому я и интересовался
про ретрансмиты - этот параметр можно посмотреть на сервере где запущен
nginx. Но и в самом деле - снифер вполне подойдёт, там тоже будет видно.
Коммутатор мне недоступен (внутреннюю сеть предоставляет дата-центр), а
потерь на интерфейсах судя по ifconfig нет.




  Может быть где-то в /proc или /sys есть общесистемный счётчик tcp
  retransmit для каждого интерфейса либо IP, чтобы проверить версию с
  потерями пакетов во внутренней сети?

  Есть общий счётчик: netstat -s (ака /proc/net/netstat).

  При чём тут счётчик ретрасмиссий -- непонятно: речь же о входящих пакетах,
  а не исходящих. Все счётчики интерфейса показывает ip -s link dev...


Я планировал посмотреть ретрансмиты на сервере который выполняет nginx и
шлёт запросы к PHP-FPM, но т.к. tcp-счётчиков для интерфейсов видимо нет,
буду использовать снифер.



  Для проверки версии о потерях пакетов достаточно сравнить счётчики
  интерфейсов клиента и сервера. Вообще, нормальные свитчи тоже умеют
  вести статистику по интерфейсам, а также считать дропнутые пакетики.


На сервере со счётчиками уровня ethernet всё хорошо, а коммутатор мне к
сожалению недоступен.



 --
  Eugene Berdnikov


 --
 To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
 with a subject of unsubscribe. Trouble? Contact
 listmas...@lists.debian.org
 Archive: http://lists.debian.org/20131120065121.gr4...@protva.ru




-- 
WBR,  Bogdan B. Rudas


Re: poll() timeout в PHP-FPM при получении запросов от Nginx

2013-11-20 Пенетрантность Andrey Tataranovich
В Wed, 20 Nov 2013 12:03:50 +0300
Bogdan bog...@gmail.com пишет:

 Не совсем тут понятно, что значит никаких данных по сети не
 приходит - т.е. удалённая сторона, в данном случае nginx, установила
 tcp-соединение, но данных в него не послала?
 
 Сравнивал с нормальным режимом функционирования системы - там таких
 пауз и близко не наблюдается. Вероятность отсуствия запроса в течении
 5 секунд при интенсивности порядка 1000-1500 запросов в секунуд мне
 кажется очень маленькой. Рабочих процессов 64, ну максимум 128. Я
 тоже рассматриваю проблему межсерверной сетью, но варианты какая-то
 проблема в ядре с одной из сторон и nginx перестал посылать
 запросы пока не могу исключить.

Даунгрейд ядра до 2.6.32 (из squeeze) решает проблему? Т.е. я предлагаю
выяснить где находится проблема (если она появилась после обновления) -
в ядре или в юзерспейсе.

-- 
WBR, Andrey Tataranovich


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131120122838.5428f4fa@dragoncore.local



Re: poll() timeout в PHP-FPM при получении запросов от Nginx

2013-11-20 Пенетрантность Eugene Berdnikov
On Wed, Nov 20, 2013 at 12:03:50PM +0300, Bogdan wrote:
  On Tue, Nov 19, 2013 at 11:58:33PM +0300, Bogdan wrote:
   Т.е. непонятно по какой причине poll() зависает на 5 секунд блокируя
  работу
   интерпретатора.
 
   Скорее всего, по той причине, что никаких данных по сети не приходит.
 
 Не совсем тут понятно, что значит никаких данных по сети не приходит -
 т.е. удалённая сторона, в данном случае nginx, установила tcp-соединение,
 но данных в него не послала?

 Может быть и так, но возможно данные посылались и потерялись где-то
 по пути... Нужно не фантазировать а опираться на факт, что poll() вышел
 на таймаут, значит, скорее всего на хосте-приёмнике данных не было.
 И самый быстрый способ проверить это -- посмотреть дамп трафика.
 После чего уже понятно, ядро виновато или локальная сеть.

  Вероятность проблемы может быть весьма высокой, например
   1/60, что при условии получения 1000-1500 запросов в секунду очень
   болезненно.
   Подскажите, куда дальше копать?
 
   Убедиться, что данных действительно нет, если в этом сомневаетесь.
   Т.е. tcpdump в руки и искать эту коннекцию.
 
 Ну поискать-то в этом потоке будет весьма сложно, потому я и интересовался

 Что сложного в том, чтобы найти в дампе коннекции с нужными номерами портов?
 Просто указываете tcpdump'у номер порта. Там ещё отметки времени есть.

 Я планировал посмотреть ретрансмиты на сервере который выполняет nginx и
 шлёт запросы к PHP-FPM, но т.к. tcp-счётчиков для интерфейсов видимо нет,
 буду использовать снифер.

 Наличие потерь и ретрансмиссий в сети легко детектируется по опции SACK.
 Хотя конкретно этот случай (потеря на старте коннекции) так не поймаешь.
-- 
 Eugene Berdnikov


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131120095002.gt4...@protva.ru



Re: poll() timeout в PHP-FPM при получении запросов от Nginx

2013-11-20 Пенетрантность Dmitrii Kashin
Andrey Tataranovich tataranov...@gmail.com writes:

 В Wed, 20 Nov 2013 12:03:50 +0300 Bogdan bog...@gmail.com пишет:

 Я тоже рассматриваю проблему межсерверной сетью, но варианты
 какая-то проблема в ядре с одной из сторон и nginx перестал
 посылать запросы пока не могу исключить.

 Даунгрейд ядра до 2.6.32 (из squeeze) решает проблему? Т.е. я
 предлагаю выяснить где находится проблема (если она появилась после
 обновления) - в ядре или в юзерспейсе.

Я предчувствую, что этот человек скорее всего не может выключить сервер,
ибо после перезагрузки он просто не поднимется: 1500 запросов в секунду
на сервер с пустым кэшем - тот ещё DDoS.

Но кстати хороший вопрос всё же - а когда эта проблема появилась,
заметили? 


pgpc8lcdMS937.pgp
Description: PGP signature


Re: poll() timeout в PHP-FPM при получении запросов от Nginx

2013-11-20 Пенетрантность Andrey Tataranovich
В Wed, 20 Nov 2013 14:52:05 +0400
Dmitrii Kashin free...@freehck.ru пишет:
 Но кстати хороший вопрос всё же - а когда эта проблема появилась,
 заметили? 

В первом письме сказано, что заметили после обновления со squeeze до
wheezy.

-- 
WBR, Andrey Tataranovich


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131120140424.29d942ea@dragoncore.local



Re: poll() timeout в PHP-FPM при получении запросов от Nginx

2013-11-20 Пенетрантность Bogdan
2013/11/20 Eugene Berdnikov b...@protva.ru

 On Wed, Nov 20, 2013 at 12:03:50PM +0300, Bogdan wrote:
   On Tue, Nov 19, 2013 at 11:58:33PM +0300, Bogdan wrote:
Т.е. непонятно по какой причине poll() зависает на 5 секунд блокируя
   работу
интерпретатора.
  
Скорее всего, по той причине, что никаких данных по сети не приходит.
 
  Не совсем тут понятно, что значит никаких данных по сети не приходит -
  т.е. удалённая сторона, в данном случае nginx, установила tcp-соединение,
  но данных в него не послала?

  Может быть и так, но возможно данные посылались и потерялись где-то
  по пути... Нужно не фантазировать а опираться на факт, что poll() вышел
  на таймаут, значит, скорее всего на хосте-приёмнике данных не было.
  И самый быстрый способ проверить это -- посмотреть дамп трафика.
  После чего уже понятно, ядро виновато или локальная сеть.


Сегодня проблема воспроизвела на другом сервере, где nginx
(1.2.1-2.2wheezy1) и php 5.4 на Debian 7, расположены вместе и коннект
проходит сугубо через локалхост.
Выглядело это следующим образом:

20:43:09.699398 write(19, \1\6\0\1\3\324\4\0X-Powered-By:
PHP/5.4.4-14+deb7u5\r\nLast-Modified: Wed, 20 Nov 2013 16:43:09 +
GMT\r\nPragma: no-cache\r\nCon
tent-type: text/javascript\r\nExpires: Wed, 20 Nov 2013 16:43:09
+\r\nCache-Control: must-revalidate\r\nP3P: policyref=\/w3c/p3p.xml\,
CP=\UN..., 1008)
 = 1008
20:43:09.699470 shutdown(19, 1 /* send */) = -1 ENOTCONN (Transport
endpoint is not connected)
20:43:09.699504 recvfrom(19, \1\5\0\1\0\0\0\0, 8, 0, NULL, NULL) = 8
20:43:09.699536 recvfrom(19, , 8, 0, NULL, NULL) = 0
20:43:09.699561 close(19)   = 0
20:43:09.699682 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0,
0}}, NULL) = 0
20:43:09.699714 accept(0, {sa_family=AF_INET, sin_port=htons(7837),
sin_addr=inet_addr(192.168.1.2)}, [16]) = 19
20:43:09.699750 time(NULL)  = 1384965789
20:43:09.699775 times({tms_utime=1902, tms_stime=373, tms_cutime=0,
tms_cstime=0}) = 2323052248
20:43:09.699802 poll([{fd=19, events=POLLIN}], 1, 5000) = 0 (Timeout)
20:43:14.705014 close(19)   = 0
20:43:14.705281 accept(0, {sa_family=AF_INET, sin_port=htons(3676),
sin_addr=inet_addr(192.168.1.2)}, [16]) = 19
20:43:14.705435 time(NULL)  = 1384965794
20:43:14.705583 times({tms_utime=1902, tms_stime=373, tms_cutime=0,
tms_cstime=0}) = 2323052748
20:43:14.705706 poll([{fd=19, events=POLLIN}], 1, 5000) = 0 (Timeout)
20:43:19.707391 close(19)   = 0
20:43:19.707519 accept(0, {sa_family=AF_INET, sin_port=htons(56862),
sin_addr=inet_addr(192.168.1.2)}, [16]) = 19
20:43:19.707558 time(NULL)  = 1384965799
20:43:19.707582 times({tms_utime=1902, tms_stime=373, tms_cutime=0,
tms_cstime=0}) = 2323053249
20:43:19.707607 poll([{fd=19, events=POLLIN}], 1, 5000) = 0 (Timeout)
20:43:24.711363 close(19)   = 0
20:43:24.711482 accept(0, {sa_family=AF_INET, sin_port=htons(40505),
sin_addr=inet_addr(192.168.1.2)}, [16]) = 19
20:43:24.711524 time(NULL)  = 1384965804
20:43:24.711548 times({tms_utime=1902, tms_stime=373, tms_cutime=0,
tms_cstime=0}) = 2323053749
20:43:24.711575 poll([{fd=19, events=POLLIN}], 1, 5000) = 1 ([{fd=19,
revents=POLLIN}])
20:43:24.711608 read(19, \1\1\0\1\0\10\0\0, 8) = 8
20:43:24.711638 read(19, \0\1\0\0\0\0\0\0, 8) = 8
20:43:24.711670 read(19, \1\4\0\1\5\36\2\0, 8) = 8
20:43:24.711698 read(19, \f\200\0\0\352QUERY_STRING..

Т.е. после успешного запроса - несколько подряд попыток почитать
что-нибудь из соединения, последняя оказывается успешной.
Из не нормального: количество соединений в состоянии SYN_SENT на порт
PHP-FPM было более 1000 постоянно, SYN_RECV - чуть меньше.
После растарта php-fpm на этот раз всё самой собой прошло, в netstat
соединений на порт PHP нет. К сожалению ребут от этой беды спасает далеко
не всегда.
Но по крайней мере, раз всё воспроизводится в пределах одного сервера -
проблему интерконнекта наверное пока можно перестать рассматривать.
Дамп трафика в этот момент у меня получился без таймингов,
tcp.analysis.retransmission показал два десятка пакетов - повторная
передача [PSH, ACK] от nginx к PHP, всего в дампе ~50k пакетов.
И кого тут подозревать? PHP или ядро, куда двигаться дальше?


nut, usbhid-ups, Powercom WOW

2013-11-20 Пенетрантность Artem Chuprina
Привет.

Что-то я туплю, и не могу нагуглить решение.  Доку от начала до конца
еще не читал.

Итак.

wheezy, amd64, nut-server 2.6.4-2.3

Если написать в /etc/nut/ups.conf

[powercom]
driver = usbhid-ups
port = auto

и позвать

/lib/nut/usbhid-ups - -a powercom

то драйвер пишет 

failed to claim USB device: could not claim interface 0: Operation not permitted
failed to detach kernel driver from USB device: could not detach kernel driver 
from interface 0: Operation not permitted

и отваливается.  Если добавить перед секцией

user=root

то прав ему хватает, но не хватает прав upsd, чтобы связаться с драйвером:

upsd[3302]: Can't connect to UPS [powercom] (usbhid-ups-powercom): Permission 
denied

Если добавить еще 

UPSD_OPTIONS=-u root

в /etc/nut/nut.conf, то вроде как все поднимается нормально, но, блин,
не зря же он по умолчанию запускается под юзером nut, а не под рутом.

Где бы чего подкрутить, чтобы ему рута было не надо?  Вряд ли же пакет
делают так, чтобы он не работал из коробки с большинством упсов...

Еще, надо сказать, я нагуглил в процессе дополнительную опцию pollonly в
секцию упса.  Надо сказать, что если поставить pollonly, то драйвер
дебаггинг выводит гораздо более тихий, но вроде, демон работает и без
нее...


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/8738mr3oyo@wizzle.ran.pp.ru



ICU

2013-11-20 Пенетрантность Артём Н.

Может быть кто-нибудь пользовался libicu для перекодировки?
Наверняка тут есть такие. :-)
Подскажите пожалуйста.

Мне нужно перекодировать строго в/из ASCII-7.
Если в источнике или в результате есть символы с кодом больше 127, я хочу 
получить ошибку.
Использую ucnv_convertEx(), например передавая в качестве from энкодера, энкодер 
с кодировкой US-ASCII.
Но чтобы там ни было в старшем бите, он мне успешно перекодирует (без возврата 
ошибки) в непечатные символы.


Как сделать так, чтобы при передаче некорректного символа ASCII (с установленным 
старшим битом), устанавливался флаг ошибки, а не SUCCESS?



--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/528d0311.3010...@yandex.ru



Re: nut, usbhid-ups, Powercom WOW (solved)

2013-11-20 Пенетрантность Artem Chuprina
... и через 20 минут нашел решение, тупое до безобразия.  Надо было
просто дать отработать правилам udev, которые приносит с собой
nut-server.  Единственное - я так и не знаю, как это сделать без
перезагрузки...

Artem Chuprina - debian-russian@lists.debian.org  @ Wed, 20 Nov 2013 22:30:55 
+0400:

 AC Привет.

 AC Что-то я туплю, и не могу нагуглить решение.  Доку от начала до конца
 AC еще не читал.

 AC Итак.

 AC wheezy, amd64, nut-server 2.6.4-2.3

 AC Если написать в /etc/nut/ups.conf

 AC [powercom]
 AC driver = usbhid-ups
 AC port = auto

 AC и позвать

 AC /lib/nut/usbhid-ups - -a powercom

 AC то драйвер пишет 

 AC failed to claim USB device: could not claim interface 0: Operation not 
permitted
 AC failed to detach kernel driver from USB device: could not detach kernel 
driver from interface 0: Operation not permitted

 AC и отваливается.  Если добавить перед секцией

 AC user=root

 AC то прав ему хватает, но не хватает прав upsd, чтобы связаться с драйвером:

 AC upsd[3302]: Can't connect to UPS [powercom] (usbhid-ups-powercom): 
Permission denied

 AC Если добавить еще 

 AC UPSD_OPTIONS=-u root

 AC в /etc/nut/nut.conf, то вроде как все поднимается нормально, но, блин,
 AC не зря же он по умолчанию запускается под юзером nut, а не под рутом.

 AC Где бы чего подкрутить, чтобы ему рута было не надо?  Вряд ли же пакет
 AC делают так, чтобы он не работал из коробки с большинством упсов...

 AC Еще, надо сказать, я нагуглил в процессе дополнительную опцию pollonly в
 AC секцию упса.  Надо сказать, что если поставить pollonly, то драйвер
 AC дебаггинг выводит гораздо более тихий, но вроде, демон работает и без
 AC нее...


 AC -- 
 AC To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
 AC with a subject of unsubscribe. Trouble? Contact 
listmas...@lists.debian.org
 AC Archive: http://lists.debian.org/8738mr3oyo@wizzle.ran.pp.ru


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/87vbzm3nun@wizzle.ran.pp.ru



Re: nut, usbhid-ups, Powercom WOW (solved)

2013-11-20 Пенетрантность Andrey Tataranovich
В Wed, 20 Nov 2013 22:54:56 +0400
Artem Chuprina r...@ran.pp.ru пишет:

 ... и через 20 минут нашел решение, тупое до безобразия.  Надо было
 просто дать отработать правилам udev, которые приносит с собой
 nut-server.  Единственное - я так и не знаю, как это сделать без
 перезагрузки...

$ sudo udevadm control --reload-rules
$ sudo udevadm trigger --subsystem-match=usb

Хотя проще вместо последней команды отключить и подключить UPS.

-- 
WBR, Andrey Tataranovich


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131121002032.44895b81@dragoncore.local