Статистика «Memcache» сообщает о ненулевых «curr_connections», но lsof не показывает соединений сокетов

Наш демон memcache сообщает о ненулевых «curr_connections» …

$ telnet memcache-server 11211 Escape character is '^]'. stats ... STAT curr_connections 12 ... 

… и все же lsof показывает соединений сокетов:

 $ ssh memcache-server # lsof -P -i -n | grep memcache memcached 1759 memcached 26u IPv4 11638 0t0 TCP *:11211 (LISTEN) memcached 1759 memcached 27u IPv6 11639 0t0 TCP *:11211 (LISTEN) memcached 1759 memcached 28u IPv4 11642 0t0 UDP *:11211 memcached 1759 memcached 29u IPv6 11643 0t0 UDP *:11211 

Я предполагаю, что «curr_connections» не означает, что я думаю, что он делает …

One Solution collect form web for “Статистика «Memcache» сообщает о ненулевых «curr_connections», но lsof не показывает соединений сокетов”

Я думаю, что вы правы в своей логике, что stat curr_connections – это количество подключаемых соединений.

curr_connections – количество открытых подключений к этому серверу Memcached должно быть одинаковым для всех серверов во время нормальной работы. Это что-то вроде количества строк результатов SHS PROCESSLIST mySQL.

Источник: статистика Memcached (команда статистики)

Когда я устанавливаю memcached я заметил, что он всегда поддерживал 10 как наименьшее количество curr_connections .

 $ echo stats | nc localhost 11211 | grep curr_conn STAT curr_connections 10 

Но почему 10?

Если вы запустили memcached в подробном режиме, вы увидите следующий вывод:

 $ memcached -vv ... <26 server listening (auto-negotiate) <27 server listening (auto-negotiate) <28 send buffer was 212992, now 268435456 <28 server listening (udp) <28 server listening (udp) <28 server listening (udp) <29 send buffer was 212992, now 268435456 <28 server listening (udp) <29 server listening (udp) <29 server listening (udp) <29 server listening (udp) <29 server listening (udp) 

Если вы подсчитаете серверы прослушивания (8) + 2 сервера (с автосогласованием), вы обнаружите, почему запускается 10 базовых серверов, по крайней мере, это то, о чем я думал вначале. Но вам нужно копать глубже, чтобы лучше понять, что происходит.

Казалось бы, memcached многопоточен, и поэтому вывод, о котором вы обращали внимание, на самом деле не так, как можно было бы подсчитать соединения.

Обратите внимание на потоки

Выходной сигнал ps -eLf показывает потоки:

 $ ps -eLf | grep memc saml 20036 4393 20036 0 6 20:07 pts/7 00:00:00 memcached -vv saml 20036 4393 20037 0 6 20:07 pts/7 00:00:00 memcached -vv saml 20036 4393 20038 0 6 20:07 pts/7 00:00:00 memcached -vv saml 20036 4393 20039 0 6 20:07 pts/7 00:00:00 memcached -vv saml 20036 4393 20040 0 6 20:07 pts/7 00:00:00 memcached -vv saml 20036 4393 20041 0 6 20:07 pts/7 00:00:00 memcached -vv 

Существует один главный узел и 5 рабочих потоков.

Вот как выглядит вывод lsof когда я сделал 3 подключения к memcached используя тот же метод, что и вы, telnet localhost 11211 .

ss # 1

Таким образом, кажется, что каждый поток поддерживает соединение (или ссылку на каждое соединение) по мере их создания и остается открытым. Как только telnet соединения будут закрыты, они исчезнут из этого списка.

Итак, как мы можем подсчитать соединения?

Поэтому, если вы хотите подсчитать соединения, вы можете либо вычесть 10 из результата curr_connections , либо вы можете запустить lsof и подсчитать количество подключений, связанных с основным PID. Обратите внимание на этот вывод:

 $ lsof |grep memcac | grep IPv memcached 20036 saml 26u IPv4 7833065 0t0 TCP *:memcache (LISTEN) memcached 20036 saml 27u IPv6 7833066 0t0 TCP *:memcache (LISTEN) memcached 20036 saml 28u IPv4 7833069 0t0 UDP *:memcache memcached 20036 saml 29u IPv6 7833070 0t0 UDP *:memcache memcached 20036 saml 30u IPv6 7962078 0t0 TCP localhost:memcache->localhost:38728 (ESTABLISHED) 

Последняя строка – это активное соединение. Поэтому мы могли бы считать их такими:

 $ lsof -p $(pgrep memcached) | grep "memcache->" | wc -l 1 

Но ваш вывод показывает IPv4 и IPv6, что с этим связано?

Чтобы еще больше упростить пример, давайте начнем memcached и заставим его слушать только один IPv4-адрес, 192.168.1.20. В приведенных выше примерах мы memcached на всех интерфейсах и подключались к нему с помощью localhost , поэтому давайте еще раз взглянем.

 $ memcached -vv -l 192.168.1.20 ... <26 server listening (auto-negotiate) <27 send buffer was 212992, now 268435456 <27 server listening (udp) <27 server listening (udp) <27 server listening (udp) <27 server listening (udp) 

Заметьте, что мы получаем только 1/2? Раньше у нас было 2 сервера с автосогласованием и 8 UDP, на этот раз у нас есть 1 авто и 4 UDP. Зачем? Ну, мы сказали memcached чтобы слушать только интерфейс IPv4, ранее он слушал все, IPv4 и localhost. Мы можем убедиться в этом, пытаясь подключиться к серверу на localhost:

 $ telnet localhost 11211 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused 

Смотрите, мы не можем подключиться. Но мы можем использовать адрес IPv4:

 $ telnet 192.168.1.20 11211 Trying 192.168.1.20... Connected to 192.168.1.20. Escape character is '^]'. 

Что теперь говорят о статистике?

 STAT curr_connections 5 

Видеть? В curr_connections отображается номер 5 (1 авто + 4 UDP).

4 UDP?

Почему мы запускаем 4 UDP? По-видимому, это значение по умолчанию в memcached . Вы можете увидеть настройки, используя команду stats settings command when you telnet` на сервере:

 stats settings STAT maxbytes 67108864 STAT maxconns 1024 STAT tcpport 11211 STAT udpport 11211 STAT inter 192.168.1.20 STAT verbosity 2 ... STAT num_threads 4 STAT num_threads_per_udp 4 ... 

Можем ли мы изменить это значение? Конечно, это -t # переключатель memcached .

 $ memcached -vv -l 192.168.1.20 -t 1 ... <11 server listening (auto-negotiate) <12 send buffer was 212992, now 268435456 <12 server listening (udp) 

Итак, теперь у нас есть только основной прослушиватель (авто) и 1 поток UDP. Если мы проверим stats сейчас:

 STAT curr_connections 2 

Кстати, мы не можем установить число потоков в 0.

 $ memcached -vv -l 192.168.1.20 -t 0 Number of threads must be greater than 0 

Таким образом, самое низкое, на которое мы можем получить curr_connections равно 2. Если мы откроем 6 telnets (5 из наших – greeneggs и 1 с другого удаленного сервера с именем skinner), мы увидим следующее в нашем lsof выходе:

 $ lsof -p $(pgrep memcached) | grep ":memcache" memcached 24949 saml 11u IPv4 847365 0t0 TCP greeneggs.bubba.net:memcache (LISTEN) memcached 24949 saml 12u IPv4 847366 0t0 UDP greeneggs.bubba.net:memcache memcached 24949 saml 13u IPv4 855914 0t0 TCP greeneggs.bubba.net:memcache->greeneggs.bubba.net:48273 (ESTABLISHED) memcached 24949 saml 14u IPv4 872538 0t0 TCP greeneggs.bubba.net:memcache->skinner.bubba.net:41352 (ESTABLISHED) memcached 24949 saml 15u IPv4 855975 0t0 TCP greeneggs.bubba.net:memcache->greeneggs.bubba.net:48298 (ESTABLISHED) memcached 24949 saml 16u IPv4 855992 0t0 TCP greeneggs.bubba.net:memcache->greeneggs.bubba.net:48305 (ESTABLISHED) memcached 24949 saml 17u IPv4 859065 0t0 TCP greeneggs.bubba.net:memcache->greeneggs.bubba.net:48316 (ESTABLISHED) memcached 24949 saml 18u IPv4 859077 0t0 TCP greeneggs.bubba.net:memcache->greeneggs.bubba.net:48326 (ESTABLISHED) 

Таким образом, мы все еще имеем auto + 1 UDP и 6 других соединений. Команда нашей stats показывает это:

 STAT curr_connections 8 

Так что неудивительно.

  • Msgstr "lsof: невозможно прочитать namelist из / dev / ksyms" в Solaris
  • Как правильно вызвать lsof для получения всех TCP-соединений?
  • lsof: нет записи pwd для UID
  • Более быстрые альтернативы lsof
  • Почему syslog-трафик не отображается в netstat и lsof?
  • Определение того, какой процесс связан с портом
  • Как захватить номер порта из этого выхода `lsof -F`, используя awk (или что-то лучше)?
  • Активность дискового диска FreeBSD 10
  • ls не отображает скрытый файл (OS X)
  • В ли списках `lsof` есть несинхронизированные / отложенные записи?
  • «Netstat -p» / «ss -p» не показывает процесс прослушивания порта
  • разрешение root запрещено в / proc / 1 / exe
  • Interesting Posts

    Вручную подключиться к точке доступа Wi-Fi (AP), несмотря на предварительно сконфигурированные точки доступа в wpa_supplicant

    если я использую мультипликативные суффиксы в systemd, то ошибки – «не удалось проанализировать значение ресурса»

    определенные символы преобразуются при добавлении в файл

    В чем разница между вставкой с помощью средней кнопки мыши и Shift + Ins?

    Fail2ban с firewalld

    Как выполнить команду watch на выражение с помощью труб?

    Как я могу запустить Java в ядре Arch Linux ядра grsec-hardend с помощью paxd?

    tc command linux

    Как распечатать имя процесса рядом с идентификационным номером процесса в файле?

    Как я могу постоянно запускать скрипт bash, проверяя, изменилось ли значение?

    Результат неожиданного условия в сценарии ksh

    Сохранить пароль как hash в wpa_supplicant.conf?

    Восстановить окно GUI после минимизации в ratpoison

    Переменные ls, regexp и environment

    Перечислите любой файл, заканчивающийся на .in и соответствующий .out с помощью сценария оболочки

    Linux и Unix - лучшая ОС в мире.