The process is leaking descriptors
CommonDescriptors are opened and never closed — a connection pool that discards clients without closing them, a library that opens a file per request, a retry loop that reconnects on failure and abandons the old socket. The signature is that the count only ever climbs. Restarting clears it and the clock starts again, which is why this often presents as a service that needs restarting every few days.
Confirm
for i in 1 2 3; do ls /proc/<pid>/fd | wc -l; sleep 10; done
A count that rises across the three samples and never comes back down while the workload is steady
Fix
- Group the open descriptors by what they point at — that normally names the leak in one line, because the leaked kind dominates the list.
- Fix the close path in the application. A higher limit only moves the failure further out.
- If the leak is in a dependency you cannot change, a scheduled restart is a holding measure, not a resolution — and worth recording as such so it is not mistaken for a fix later.
ls -l /proc/<pid>/fd | awk 'NR>1{print $NF}' | sed -E 's/:\[[0-9]+\]$//' | sort | uniq -c | sort -rn | head -20Counts descriptors by target, with socket and pipe inode numbers stripped so they group. Thousands of sockets or pipes, or the same file over and over, is the leak.