查看“打开文件描述符”

I have a webpage where the backend is written in Go and running on Ubuntu, and after a certain amount of days and activity, like clockwork, the goroutine will throw a 'panic' and start giving 502 proxy errors. The error I'm getting in Go is "too many open files."

After doing some research, I feel that I've narrowed the issue down to having too many "open file descriptors." I have read different proposed solutions which seem to have varying results for different people. That is all fine, but if I wanted to actually view these supposedly open file descriptors in realtime so that I can actually pinpoint what these "files" are how would I do that? I ask this because rather than try to guess as to which parts of my Go program are causing this I'd like to see if I can narrow things down even further (possibly to a MySQL socket that's not closing properly, or an OS file also not closing properly, etc.)

You can use the lsof command (Linux) to "list open files". There will be a lot of output so it's good to filter the output by using options. lsof -p <PID> might be useful if you know the PID of your process. Use the ps command to find the PID.