Как найти процесс, принимающий запрос, и определить нужный среди множества
Что проверяют
Умеете ли вы на живом сервере за минуту найти, какой процесс слушает порт, и отличить нужный экземпляр от соседних. Следом обычно усложняют: процесс в контейнере, за балансировщиком или несколько воркеров на одном порту.
Как отвечать
Базовый шаг, кто слушает порт:
ss -ltnp 'sport = :8080': слушающие TCP-сокеты с PID и именем процесса. Запускать подsudo, иначе процессы других пользователей не покажутся.netstatиз net-tools устарел и на свежих системах часто не установлен;lsof -iTCP:8080 -sTCP:LISTENилиfuser 8080/tcp: то же самое другими средствами;ps -o pid,ppid,user,cmd -p <PID>иsystemctl status <PID>: команда запуска и systemd-юнит, к которому относится процесс.
Когда кандидатов несколько:
- мастер и воркеры: у nginx или gunicorn порт открывает мастер, а соединения принимают воркеры. Кто держит конкретное соединение, покажет
ss -tnp state established '( sport = :8080 )'; SO_REUSEPORT: несколько процессов слушают один порт, и ядро раскидывает соединения между ними;- контейнеры: на хосте видно
docker-proxyили вообще ничего, потому что сокет живёт в сетевом неймспейсе контейнера. Проброс смотрите черезdocker psиiptables -t nat -L -n, а внутрь заходитеnsenter -t <PID> -n ss -ltnp; - Kubernetes: цепочка Service, EndpointSlice, под.
kubectl get endpointslices -l kubernetes.io/service-name=<svc>покажет, на какие поды идёт трафик.
Какой экземпляр обработал конкретный запрос, скажет сквозной идентификатор: X-Request-Id или trace id в логах, а в логе nginx переменные $upstream_addr и $pid. В крайнем случае помогут tcpdump -i any port 8080 или strace -p <PID> -e trace=accept4.
Где спотыкаются
Ищут по имени через ps aux | grep java и берут первый попавшийся процесс. На сервере с тремя Java-сервисами это лотерея.
Запускают ss -p без прав и решают, что порт никто не слушает, раз колонка процессов пустая.
Забывают, что запрос мог вообще не дойти до этой машины: DNS, балансировщик или другая нода кластера. Сначала стоит убедиться, что трафик идёт сюда.