Address already in use, BindException
If you’ve ever encountered this exception:
java.net.BindException: Address already in use:8080
there’s a great tool that you can use to determine what application(s) are running on a specific port: lsof
Looking at the man page for lsof, we find the following:
Lsof revision 4.81 lists on its standard output file information about files opened by processes for the following UNIX dialects:
FreeBSD 4.9 for x86-based systems
FreeBSD 7.0 and 8.0 for AMD64-based systems
Linux 2.1.72 and above for x86-based systems
Solaris 9 and 10
(See the DISTRIBUTION section of this manual page for information on how to obtain the latest lsof revision.)
An open file may be a regular file, a directory, a block special file, a character special file, an executing text reference, a library, a stream or a network file (Internet socket, NFS file or UNIX domain socket.) A specific file or all the files in a file system may be selected by path.
Instead of a formatted display, lsof will produce output that can be parsed by other programs. See the -F, option description, and the OUT-PUT FOR OTHER PROGRAMS section for more information.
In addition to producing a single output list, lsof will run in repeat mode. In repeat mode it will produce output, delay, then repeat the output operation until stopped with an interrupt or quit signal. See the +|-r [t[m<fmt>]] option description for more information.
To use it, type the following:
So in our case, we attempt to bind to port 8080, so running:
Gives us an output like the following:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
MyApp 50845 dustinkendall … … … … … …
To kill the process, type:
So in our case:
This will help you get past the java.net.BindException and allow you to bind to that port.