Why is lsof on OS X so ridiculously slow?
As my experience, from Mac OS X 10.7(Lion) to 10.11.5（EI Capitan), the lsof always hang.

To solve to problem, append -n option.

lsof -n


According to manual of lsof, the -n option:

inhibits the conversion of network numbers to host names for network files.  
Inhibiting conversion may make  lsof  run faster.  It is also useful when host 
name lookup is not working properly


EDIT 2018-04-25: If it is still slow, you can try 

-O to bypass  the  strategy it uses to avoid being blocked by some kernel operations
-P to inhibits the conversion of port numbers to port names for network files
-l to inhibits  the  conversion of user ID numbers to login names


The ultimate way to find out why so slow is to run "Instruments" tool (from upper right corner Spotlight Search icon) to do a "System Trace" on /usr/sbin/lsof then see graph and sys calls.