Diagnostic step 1
Check process limits: run 'cat /proc/$(pidof server)/limits' and increase nofile (systemd LimitNOFILE) temporarily to a high value (e.g., 65k) to see if errors drop.
Generated Oct 13, 2026, 9:45:52 AM
Check process limits: run 'cat /proc/$(pidof server)/limits' and increase nofile (systemd LimitNOFILE) temporarily to a high value (e.g., 65k) to see if errors drop.
Enable gRPC verbose logging (GRPC_GO_LOG_SEVERITY_LEVEL=info GRPC_GO_LOG_VERBOSITY_LEVEL=99) to collect detailed HTTP/2/stream events; rotate logs to avoid disk fill.
Expose current HTTP/2 MaxConcurrentStreams: instrument server to log http2 server settings or use Wireshark/tcpdump on localhost to inspect SETTINGS frames exchanged during handshake.
Run a controlled load test against the server directly (bypass NLB) to confirm if GOAWAY still appears — if not, inspect NLB connection reuse/idle-timeout and consider enabling proxy-protocol or switching to ALB that preserves HTTP/2 if required.
Temporarily raise gRPC server-side concurrency settings (e.g., grpc.MaxConcurrentStreams via ServerOptions) and observe behavior; rollback if memory/goroutine usage increases beyond safe thresholds. Monitor memory/CPU with pprof and goroutine counts (runtime.NumGoroutine).