I finally found the root cause of my issue: A groovy script opens the output of some runs using "run.getLogReader()".
And the created reader is never closed. Therefore, file handle remains open.
Hope this can help for other people having the same issue...
After Jenkins upgraded from 2.46.2 to 2.138.4 on Jan 5. 2019,
I started to see many (deleted) open file handles.
Those (deleted) open file handles seem caused by "discard old build" rotate.
The "builds/.${old-build-number}" folder doesn't exist anymore,
but when using "lsof" command to check, it showed up:
sudo lsof -a -p $(pgrep -P $(sudo cat /var/run/jenkins/jenkins.pid)) | grep '(deleted)'
eg
Originally reported by totoroliu, imported from: Jenkins discard-old-build caused open file handles