Простите, если это не лучший форум для этого вопроса, но он кажется более актуальным для ядра, чем для самого программирования.
Я пишу скрипт, который запрашивает у системы открытые порты, чтобы мы могли отслеживать и отслеживать статистику. Для этого я использую команду "ss" из пакета iproute. Если вы выполните, ss -s|grep estab
вы получите вывод, похожий на этот:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Мой вопрос связан с переменной timewait, которая показывает вычисленные сокеты в состоянии TIME_WAIT. Когда я попытался выяснить, на какое число ссылались после косой черты, это превратилось в бурное приключение поиска исходного кода, которое в конечном итоге привело меня к поиску следующего фрагмента:
printf("TCP: %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
sn.tcp_estab,
s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
s.tcp_orphans,
slabstat.tcp_syns,
s.tcp_tws, slabstat.tcp_tws,
slabstat.tcp_ports
);
Я должен признать, что мой поиск того, что должен был означать «slabstat», в конечном итоге привел к тому, что я узнал о кешах slab и их интерфейсе отчетов в / proc / slabinfo.
Вопрос: какое отношение имеет slabtable к вычислениям сокетов TIME_WAIT? Я не могу понять, почему сообщается об этом числе, так как каждый раз, когда я запускаю команду на каждом сервере, на котором я его пробовал, число всегда было равно нулю.