Not able to find port number for tomcat process on Ubuntu - linux

I am not able to find a port number for running Tomcat server on Ubuntu
i.e. netstart -anp | grep 'tomcat' but not getting any output.

You will want to grep for java and not tomcat, as the process binary is java and not Tomcat.
If you'd like to find the PID for the process to make things easier (e.g. if you have lots of Java processes on the server), you can do this:
ps aux | grep catalina
This will show you your various Tomcat processes. Each one will have a system property on the command-line like this:
-Dcatalina.base=/path/to/your/tomcat
Note that there is also catalina.home which may be different. If they are different, it is catalina.base which is the correct one, which contains your server's conf/server.xml which controls the server.
Once you have that PID, you can netstat -plan | grep [PID] to get your port number.
Or just look in /path/to/your/tomcat/conf/server.xml for any <Connector> elements, each of which should have a port specified.

Related

Why HTTP ports stay open when using them by Nodejs servers?

I have a problem when launching a Nodejs script that listens in one of the HTTP ports. Sometimes, even if I stop the script, the used HTTP port stays "in use", making it impossible to use it another time. Today, i've set up NGINX in my linux and all the HTTP ports were "in use". I was obliged to restart my computer to solve the problem.
I wanted to know why is this happening ? What can i do to prevent it ? and in case an HTTP port stays "in use", how can i close it to be able to use again ?
Thanks for your help.
This is applicable only on Linux and MacOS, you can list all your used ports like that:
sudo lsof -i -P -n | grep LISTEN
Read more here about how to check if a port is in use: https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/
You can also list the node processes:
top | grep node
or
ps -ef | grep node
Then you can kill the node processes like that:
killall node
Make sure that when you want to stop the server you are pressing CTRL + C

Figure out which port a local Apache Spark UI is on

To find out some info about a local spark process, launched locally via spark-shell command I can do:
jps -lm | grep -i spark
However, how do I find what TCP port the UI is published on?
I have tried:
lsof -p PID
but no luck.
If you list open ports, you can filter by greping the PID (My pid is 30688, but you can also grep by java or something just to narrow the results):
$ ss -l -p -n | grep -i 30688
And, unless you've reconfigured it to a dramatically different range, you should be able to see a 40* port (I replaced tabs with -- to save space):
tcp--LISTEN--0--50--*:4040--*:*--users:(("java",pid=30688,fd=275))
Seems you already have the PID. in that case you can run below, which should indicate what ports the process is listening on:
netstat -tunlp|grep LISTEN|grep PID
The spark driver process may be listening on more than one ports, so you may have to try http://host:port for the ports obtained.
Alternatively, if you are finding only one PIDs from your jps | grep, then you can be sure that the port is 4040(default spark web ui port), unless you find the args spark.webui.port. In the latter case, get the port from the args value.

What are the differences between lsof and netstat on linux?

I encounted a problem today:
When I started HDP docker container, an error occured:
listen tcp 0.0.0.0:8086: bind: address already in use
According to error message, I know that port 8086 was already in use, so I tried some commands to determine which program was using port 8086.
lsof -i:8086
lsof -i tcp:8086
lsof | grep 8086
But all of commands above make no outputs!
I felt really confused about that, after some searching on google, I tried another command:
netstat -pna | grep 8086
I got correct output from this command.
I know some differences between lsof and netstat, but I really do not know why I cannot get any output from lsof -i:8086?.
Here are some differences between two commands I searched from google:
netstat(net statistic) is connection based,it shows NW connections (udp/tcp ports), routing tables, interface, multi-cast membership, etc.
lsof(list of open files) is application based, this is kind of like netstat + ps, there you can see all accessed ports, NW connections, etc.
but lsof includes stuff like my local emacs window terminal session (tty dev/pts/n) which is not part of netstat
I faced a similar issue today. The solution was to run the lsof command with sudo privileges.
sudo lsof -i:8086
should print the desired output.
LSOF: List of Open Files. It lists all the open files belonging to all active processes.
Examples:
sudo lsof -n -i
sudo lsof -n -i4
sudo lsof -n -i :80
-n 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
lookup is not working properly
-i selects the listing of files any of whose Internet address matches the address specified in i. If no address is specified, this option selects the listing of all Internet and x.25 (HP-UX) network files. If -i4 or -i6 is specified with no following address, only files of the indicated IP version, IPv4 or IPv6, are displayed.
NETSTAT: It is a tool to get the network statistics. By default, netstat displays a list of open sockets. If you don't specify any
address families, then the active sockets of all configured address
families will be printed.
Displays the kernel routing tables:
netstat -r
Display all listening and established connection for both TCP and UDP with PID data:
netstat -plunt
Additionally, You have another command line tool to use which is SS.
SS: It is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and state
information than other tools.
-plunt gives data for the TCP and UDP connections which are established and listening with process information:
sudo ss -plunt
You should be root to get proper answers to your lsof questions. Your command is fine, assuming something really is listening on that port.
As you already mentioned, lsof is a very useful command which is used to list files opened by a specific process, while netstat is a tool for monitoring network connections.
You should be able to find the PID of the process listening on port 8086 with netstat:
netstat -tunlp |grep :8086
and then use lsof to list the files used by the process:
lsof -p PID

how to check memory allocated to tomcat on linux server

We are facing server responding slow issue for tomcat servers.
How to check memory allocated to tomcat on Linux server? I tried in shell
ps -aux| grep tomcat and netstat -tulpn | grep 8080
But no luck.
top -p <PID of your tomcat> command will give resource utilization of only tomcat's.

Process listening which Port on Windows

How can you find out which process is listening upon which port on Windows and Linux?
Are there some Applications explicitly monitoring?
Some great tools for this are made by Sysinternals, now owned by Microsoft.
The one you want is Tcpview and it will show you the ports and which application has them opened, as well as the PID and other nice things. Tcpview is windows based but they have a command line version as well. All these tools are free.
This is the link Microsoft's sysinternals downloads
Both Windows and Linux has the netstat-command built-in, although they are used differently.
On Windows: netstat -a -b (lists both listening and connected ports)
On Linux: netstat -l -p (lists only listening ports)
On windows 7, you can use
netstat -b -a
netstat /?
-b Displays the executable involved in creating each connection or
listening port. In some cases well-known executables host
multiple independent components, and in these cases the
sequence of components involved in creating the connection
or listening port is displayed. In this case the executable
name is in [] at the bottom, on top is the component it called,
and so forth until TCP/IP was reached. Note that this option
can be time-consuming and will fail unless you have sufficient
permissions.
-o Displays the owning process ID associated with each connection.
On Linux use, -p needs root privileges.
#netstat -p
#netstat -h
-p, --programs display PID/Program name for sockets
Not sure that stackoverflow is the right place for this question, maybe http://www.superuser.com would be a better choice.
Although from the top of my head:
Linux has lsof and netstat commands that will provide this information.
Windows has ProcessExplorer that should give this information.
In Linux you can use the ss command to dump the socket information. It gives information about active port numbers in the client side also. More details can be found here
http://linux.die.net/man/8/ss

Resources