How to fix Tomcat Serveral ports problem? - java

Several ports (8005, 8080) required by Tomcat v9.0 Server at localhost
are already in use. The server may already be running in another
process, or a system process may be using the port. To start this
server you will need to stop the other process or change the port
number(s).
enter image description here
In this problem, how can I fix this? This error occurred when STS was newly installed separately from the existing Eclipse.
I tried to this solution.
enter image description here

If you are using spring boot, you could specify the port number of your server in the application.conf or application.yml file, for example if you are using an .yml extension:
or if you are using the .conf extension:
server.port=8081
the file could be found at: /src/main/resources/
Also you could list who is using your port by doing on CMD :
netstat -ano | findstr :<PORT>
and then kill the PID that uses your port:
taskkill /PID <PID> /F

Related

apache tomcat7 throws error after starting server

when I am adding server in eclipse and run getting error like "Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s)." and also changed port number in sever.xml to 8080 to 8085 but still getting the same error and still localhost:8080 showing welcome page.
Plase help me on this issue.
That means some of ports (8005, 8080, 8009) is already use by some other process. to solve this problem you have to stop that process or you can change your tomcat ports to other port like 8090,8091, 8092 etc.
for ubuntu :-
command for check process and ports : sudo netstat -tupln
kill process :- kill -9 4469

8080 port already taken issue when trying to redeploy project from Spring Tool Suite IDE

I have strange thing when I try to modify Spring project inside my Spring Tool Suite. On the first load (deploy) everything is fine, application compiles and runs on localhost:8080
When I change something inside code and try to redeploy it (Run it again - Run As Spring Boot App) I get error message
*************************** APPLICATION FAILED TO START
Description:
The Tomcat connector configured to listen on port 8080 failed to
start. The port may already be in use or the connector may be
misconfigured.
Action:
Verify the connector's configuration, identify and stop any process
that's listening on port 8080, or configure this application to listen
on another port.
2016-10-19 00:01:22.615 INFO 10988 --- [ main]
ationConfigEmbeddedWebApplicationContext : Closing
org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext#3023df74:
startup date [Wed Oct 19 00:01:19 CEST 2016]; root of context
hierarchy 2016-10-19 00:01:22.616 INFO 10988 --- [ main]
o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed
beans on shutdown
If I shutdown process on that port manually everything works fine again, but this can't be right way of redeploying Spring app. Am I doing something wrong here?
I'm using :: Spring Boot :: (v1.4.1.RELEASE)
P.S. I'm aware that I can setup some kind of hot-swap mechanism to have automatic reload of page after I change code, but for now I would like to resolve this issue first.
Thanks for any kind of help or info.
It sometimes happen even when we stop running processes in IDE with help of Red button , we continue to get same error.
It was resolved with following steps,
Check what processes are running at available ports
netstat -ao |find /i "listening"
We get following
TCP 0.0.0.0:7981 machinename:0 LISTENING 2428 TCP 0.0.0.0:7982 machinename:0 LISTENING 2428 TCP 0.0.0.0:8080 machinename:0 LISTENING 12704 TCP 0.0.0.0:8500 machinename:0 LISTENING 2428
i.e. Port Numbers and what Process Id they are listening to
Stop process running at your port number(In this case it is 8080 & Process Id is 12704)
Taskkill /F /IM 12704 (Note: Mention correct Process Id)
For more information follow these links Link1 and Link2.
For Mac users(OS X El Capitan):
You need to kill the port that localhost:8080 is running on.
To do this, you need to do two commands in the terminal :N
sudo lsof -i tcp:8080
kill -15 PID
NB! PID IS A NUMBER PROVIDED BY THE FIRST COMMAND.
The first command gives you the PID for the localhost:8080.
Replace the PID in the second command with the PID that the first command gives you to kill the process running on localhost:8080.
You have to stop the current process and run your new one. In Eclipse, you can press this button to ReLaunch your application:
The reason is one servlet container is already running on port 8080 and you are trying to run another one on port 8080.
Check what processes are running at available ports.
For Windows :
netstat -ao |find /i "listening"
OR
netstat -ano | find "8080" (Note: 8080 is port fail to start)
Now try to reLaunch or stop your application.
To relaunch: you can press this button
To stop in windows:
Taskkill /F /IM 6592
Note: Mention correct Process Id
right click on the console and select terminate/disconnect all
Go to Task Manager and end Java(tm) platform se binary
What is java(tm) platform se binary(Search in google
Another option is :
Go to application.properties file set server.port=0. This will cause Spring Boot to use a random free port every time it starts.
In my case, the error occurred as the application was unable to access the keystore for ssl.
Starting the application as root user fixed the issue.
Create application.properties file under src/main/resources folder and write content as
server.port=8084
Its runs fine.
But every time before run need to stop application first by click on red button upper on the IDE
or try
RightClick on console>click terminate/Disconnect All
If you got any error on your console by saying, “Embedded servlet container failed to start. Port 8080 was already in use.” Then go to application.properties file and add this property “server.port = 8090”.
Actually the default port for spring boot is 8080, if you have something else on that port, the above error will occur. So we are asking spring boot to run on other port by adding “server.port = 8090” in application.properties file.
This is a typical startup failure due to the embedded servlet container’s port being in use.
Your embedded tomcat container failed to start because Port 8080 was already in use.
Just Identify and stop the process that's listening on port 8080 or configure (in you application.properties file )this application to listen on another port.
SOLUTION 1
As a solution ,You can change the default port in application.properties by adding this.
server.port = 8090
SOLUTION 2
If the above solution is not working use this solution.
Here we kill the process which used that port using command prompt.
In my case,
Port =8090,
PID =22208
1). (This use to find PID)
netstat -ano | findstr :8090
2). (Kill that proccess)
taskkill /PID 22208 /F
Good Luck !
There are two ways to resolve this issue.Try option 1 first, if it doesn't work try option 2, and your problem is solved.
1) On the top right corner of your console, there is a red button, to stop the spring boot application which is already running on this port just click on the red button to terminate.
2) If the red button is not activated you need to right click on the console and select terminate/disconnect all. Hope this helps.
Bonus tip:- If you want to run your server on a different port of your choice, create a file named application.properties in resource folder of your maven project and write server.port=3000 to run your application on port 3000
Am I doing something wrong here?
Yes, you are. One servlet container is already running on port 8080 and you are trying to run another one on port 8080 again.
Either restart the server (If there is button for that in STS) or stop and start it
On Linux Machine, save the bash script and execute it. If you want to free port 8080, Input 8080 when prompted
echo "Enter port number to be closed :: "
read port
sudo kill $(sudo lsof -t -i:$port)
Just click red button to stop all services on eclipse than re- run application as Spring Boot Application - This worked for me.
Open "localhost:8080" on your browser and see what is running on this port.
I did it and I just found Oracle 10g XE running on background, so I went to start->Services and stopped all oracle services. Then I redo mvnw spring-boot:run on IntelliJ and it runs like magic.
hi creating a simple line in application.properties as SERVER_PORT=8090 solved the issue.
If you are using linux system, use the below command.
fuser -k some_port_number/tcp - that will kill that process.
Sample:-
fuser -k 8080/tcp
Second Option: Configure the tomcat to use a new port
first running from CMD :
netstat -aon |find /i "listening" |find "8080"
then get PID number and run following command:
let it 199,
taskkill /F /PID 199
In Spring Boot Application (Using Spring Starter Project) We Have Update Port in Server.xml using Tomcat server and Add this port in application.property( insrc/main/resources)
the code is
server.port=8085
And update Maven Project then run application
There are some processes left in the background on that port, several reasons can cause this problem, but you can solve easily if you end process which is related to 8080 or Spring.
If you are using Linux there is steps how to end process:
Open terminal and type command "htop"
press key F3(it will allow you to search)
Type "8080" if there was no result on 8080 after that try "spring"
Then Press F9(KILL) And press "9"(SIGKILL)
this will kill process which is left on 8080 port and let you run application.
Print the list of running processes and try to find the one that says spring in it. Once you find the appropriate process ID (PID), stop the given process.
ps aux | grep spring
kill -9 INSERT_PID_HERE
After that, try and run the application again. If you killed the correct process your port should be freed up and you can start the server again.
No Need to manually start an application every time at time of development to implements changes use 'spring-boot-devtool' maven dependency.
Automatic Restart :
To use the module you simply need to add it as a dependency in your Maven POM:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
When you have the spring-boot-devtools module included, any classpath file changes will automatically trigger an application restart. We do some tricks to try and keep restarts fast, so for many microservice style applications this technique might be good enough.
Goto Window->Preferences, search for Launching.
Select the "Terminate and Relaunch while launching" option.
Press Apply.
You can use list open file command and then kill the process like below.
sudo lsof -t -i tcp:8181 | xargs kill -9
or
sudo lsof -i tcp:8181
kill -9 PID
One simple solution for me that worked was to :
- Restart the IDE, since the stop Button was no longer visible.
One line command for MAC users:
kill `lsof -i -n -P | grep TCP | grep 8080 | tr -s " " "\n" | sed -n 2p`
If you are facing problem while redeploying, the easiest way would be to not leave port occupied. i.e. close the context of your spring application, so that PORT gets closed alongside.
You can do that in these ways:
//open context.
ConfigurableApplicationContext appContext = SpringApplication.run(Application.class, args);
...
//in the end, close it
appContext.close();
Another way would be, to: open context in try() block
try(ConfigurableApplicationContext appContext =
SpringApplication.run(Application.class, args))
{
// your code here
}
try() will take care of closing the context, therefore the PORT, even if code breaks somewhere, by
calling AutoCloseable.
ref: try-with-resources
If someone accidentally stumble on this post and his problem is that application is starting two times instead of once and it obviosly fails because port is already in use by first instantion of application. Try add these parameters in yml / properties file.
spring.devtools.restart.quiet-period: 2000
spring.devtools.restart.poll-interval: 3000
https://github.com/spring-projects/spring-boot/issues/25269
https://github.com/spring-projects/spring-boot/issues/12760
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.devtools.globalsettings.configuring-file-system-watcher
# If you are on windows os (1st way)
open task bar
right click on running JDK binary process
after right click then click on end task
# If you are on windows os (2nd way)
pres win+r -> press enter (open windows command permot)
Taskkill /F /IM <PID>
YOU CAN CHANGE THE PORT NUMBER ALSO, TRYING THAT METHOD WILL CHANGE THE ERROR OF PORT 8080
For Spring Boot 2 and later version add the property to your application configuration file(application.properties or application.yaml):
spring.main.web-application-type=WebApplicationType
The WebApplicationType can be one of:
NONE - The application should not run as a web application and should
not start an embedded web server.
REACTIVE - The application should run as a reactive web application and should start an embedded reactive web server.
SERVLET - The application should run as a servlet-based web application and should start an embedded servlet web server.

Tomcat doesn't start from eclipse on startup : Several ports (8005, 8080) required by Tomcat Server at localhost are already in use

Everyday when I start my computer, and then attempt to start my tomcat server in eclipse , it gives me following error.
starting tomcat v7.0 server at localhost has encountered a problem
I have googled for this issue but whatever I got was temporary solution/i.e killing apache
sudo kill $(ps -aef | grep apache| awk '{print $2}')
this solves the problem but not permanantly.
after entering above command on terminal , I start tomcat from eclipse and then my tomcat server starts.
but I have to enter this command daily before starting my work and also whenever I restart my PC,is there any other permanant solution which can directly allow me to start my tomcat from eclipse.
I have tried adding and removing tomcat server also deleting the server and adding it back,but this doesnt solve the problem.
FYI : I am using ubuntu 14.04,eclipse mars,tomcat version 7.
change the port numbers in server configuration.you should change all the three port number is show in bellow image.
also you can try to disable the autostart on boot, and launch tomcat from eclipse.
sudo systemctl disable tomcat7.service
Looks like you have already installed tomcat (or other application) that used 8005 or 8080 port.
You can find that application by command:
sudo netstat -lntp | grep 8080
sudo netstat -lntp | grep 8005
If you not use that application, just remove it :
sudo apt-get remove APP
P. S. Also you can just run tomcat from eclipse on other (not 8005 and 8080) ports.

Jboss Server Error:Server already running on localhost

I am working on web project where jboss application server is required. After configured the jboss server, I was running my application. It is showing error like:Server already running on local host.Web found a running server at URL //localhost:8080.
Works for me
Open Command Prompt
Type netstat -noa and hit Enter
Check the "PID" of process that uses your port
And type taskkill /PID "PID number" and hit Enter
As #Mxsky stated: You may have to force the processus to quit with the /F option.So the command becomes: taskkill /PID pid_number /F
Done. Now start the server
Generally this issue happen because of proxy setting. If none of the process running on 8080 port and still you find this error then reason is proxy server is not bypass for local address.
Bypass Proxy Server for Local Address by below Setting on IE.
Open IE, Tools -> Internet Options -> Connections -> LAN Setting -> Check mark on checkbox "Bypass proxy server for local address"
Now restart your jboss server.
If this happened from not closing eclipse properly (or it just crashed):
When it is closed, 'End Process Tree' on javaw.exe with task manager.
Restart eclipse.
This is not likely the best way but it works... or did for me at least.
If this is from another server running:
You need to make sure you have separate port numbers per server instance.
Otherwise it will not bind correctly; or at all.
What Süleyman Şahin said was right.
Open Command Prompt
Type netstat -noa and hit Enter
Check the "PID" of process that uses your port
And type taskkill /PID "PID number" and hit Enter
As #Mxsky stated: You may have to force the processus to quit with the /F option.So the command becomes: taskkill /PID pid_number /F
However, if you are unable to kill the process in the cmd, check for the PID that is using port 8080. In the command prompt, [::]8080 it will look like this.
Now, goto the Task Manager in the Details tab check for the PID and right click on the name of the service and click Go to service(s). Now stop that service that is using port 8080.
Now, open the eclipse and start the JBoss. That's it.
I solved this problem, by changing the port number in my server and then changing the port number in standalone-full.xml too.
This issue appear something due to bad configuration. You have made some change in the standalone.xml file and the server doesn't start again. You can check that by try to launch the server from cmd. if it's so, just check you config. otherwise try the approach of #ECleveland
Worked for me after opening cmd in Administrator mode:
First open the cmd in administrator mode.
Find the PID number for port 8080 by using this command:
netstat -ano | findstr :8080
Output will like:
TCP 127.0.0.1:8080 0.0.0.0:0 LISTENING 3951
Kill the PID (pidnumber is 3951 from above output. Your pidnumber is different)
taskkill/pid pidnumber
Output will like:
ERROR: The process with PID 3952 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option)
If it shows ERROR then use below command:
taskkill/pid pidnumber /F
Output: SUCCESS: The process with PID 3952 has been terminated.
Example: Image Contains the above steps with example

Tomcat starts but home page cannot open with url http://localhost:8080

I am a newbie in Java, and I am trying to develop a web application.
I have Windows 7 32 bit. I have installed Java 7 and set the path and classpath as well. After that I installed Tomcat 7.
When I try to open tomcat home page using URL localhost:8080, it does not open and Tomcat stops automatically.
Please help me.
Make sure no other application using port 8080 before starting tomcat. If that's not the problem please paste tomcat log.
If you want to change tomcat's default port, go to tomcat folder and open conf folder, in which you can see server.xml. In that file you can see something like <Connector port= . Change the port value and start tomcat.
If you started tomcat through eclipse, It can be solved in different ways too.
Method 1:
Right click on server --> Properties
click on Switch location and apply.
Method2:
Double click in the server in eclipse.
Change Server location to Use tomcat installation(takes control of tomcat installation).
Your issue is not with port 8080, but with port 8005. Port 8005 is the shutdown port for Tomcat.
Rather than trying to figure out what is using port 8005, it may just be easier to edit TOMCAT_DIR/conf/server.xml and change the shutdown port to 8006
<Server port="8006" shutdown="SHUTDOWN">
For *Unix based systems, you can check the ports used by a particular application by issueing the following command in the terminal
[~/.]$ netstat -tuplen
You will get the list of all the ports that are being currently held and used by their respective process ID's
For windows user, type netstat -anin command prompt to see ports that are listening, this may come handy.
1) Using Terminal (On Linux), go to the apache-tomcat-directory/bin folder.
2) Type ./catalina.sh start
3) To stop Tomcat, type ./catalina.sh stop from the bin folder. For some reason ./startup.sh doesn't work sometimes.
For mac users
First Try : go to activity monitor -> search for java and kill the instance then restart the server and try.
Second Try:
Check log file for any errors under tomcat logs folder.
Use below command to check tomcat logs in terminal
tail -f {tomcatpath}/logs/catalina.out
Third Try:
Check if node or other apps using the same port. Use below command to check which app listening to a specific port. You will see list of apps with pid in second column.
lsof -i :8080 | grep LISTEN
Kill the process using below command
sudo kill -9 pid
If you are using eclipse to start the server then check for the server location being used and the deployment path:
In my case changing this to Tomcat installation instead of workspace metadata worked for me.
My issue has solved.I was getting log as below.
SEVERE: StandardServer.await: create[localhost:8005]:
java.net.BindException: Cannot assign requested address: JVM_Bind
My tomcat server was automatically stopping when I tried to open tomcat homepage with
URL.
So I just made some changes in windows->System32->drivers->etc->host file.
keep only 127.0.0.1 localhost and remove all other. your problem will be solved.
Thank you guys for your help :D
If you have your tomcat started (in linux check with ps -ef | grep java) and you see it opened the port 8080 or the one you configured in server.xml (check with netstat --tcp -na | grep <port number>) but you still cannot access it in your browser check the following:
It may start but with a delay of 3-5 minutes. Check the logs/catalina.out. You should see something like this when the server started completely.
INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 38442 msIf you don't have this INFO line your server startup is not complete yet. The problem may occur due to the SecureRandom class responsible to provide random Session IDs and which can cause big delays during startup.
Check more details and the solution here.
Check your firewall (on linux iptables -L -n): You can try to reset your firewall completely iptables -F if you are not into an exposed environment. However, pay attention, that leaves you without protection therefore it can be dangerous.
Check your selinux (if you are on linux).
These are some of the most forgotten and not obvious issues in having your Apache Tomcat up and running.
I am using Eclipse Java EE IDE for Web Developers. Version: Oxygen.1a Release (4.7.1a) in Windows 8.1 x64 with Apache Tomcat 8.5.24 (for testing purpose).
Port Name & Numbers for my Tomcat Server are :
Tomcat admin port : 8005
HTTP/1.1 : 8081 (my Tomcat Listening Port Number)
AJP/1.3 : 8009
Peoples, for those the Tomcat were running good earlier, and sometimes sudden after stopping tomcat server explicitly by pressing the below shown image button or may be other reasons.
Either they continuously failed to start/restart the tomcat with below said error:
Server Tomcat vX.Y Server at localhost failed to start.
or sometimes the Tomcat Server is started but instead of showing Tomcat Homepage in web browser, it is throwing client exception HTTP Status 404 – Not Found. in preferred web browser.
possibly, there are many reasons i.e. wrong Host name defined, Wrong Tomcat Server Locations defined in eclipse, project JDK/JRE version mismatch with Tomcat JRE dependent version, maven project version mismatch due to maven.compiler.source and maven.compiler.target version not defined under properties tag, mismatch version of project facet Dynamic Web Module to 2.5/3.0, Sometimes Tomcat Server is running on Windows Services level, previous stopped Tomcat port number were still listening and the processing pid were not killed in Tomcat defined timespan Timeouts Stop (in seconds): 15(by default) in eclipse and pid still running, failed to start in defined Start (in seconds): XX, etc.
Here I will give the resolution on, how to check and kill the running existing Tomcat port number's processing pid(beware, you must be aware with after effects).
In Windows, open you command prompt, and follow steps(my tomcat HTTP port is 8081):
netstat -ano | findstr :8081
TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING 2284
TCP [::]:8081 [::]:0 LISTENING 2284
if any listening is being there, above command will list details of port listening along with processing pid at last of the line(here pid is 2284).
now kill the running pid like:
taskkill /PID 2284 /F
SUCCESS: The process with PID 2284 has been terminated.
also illustrated the above two steps like following:
Now, after resolving above illustrated reason, start the Tomcat Server.
I had the same issue. My tomcat was started but I was getting HTTP 404 page not found.However, in my situation, I installed tree instances of tomcat. Each instance contains conf, temp, work, webapps and logs folders. Unless I forgot, to copy the global web.xml under conf folder of each tomcat.
e.g: /opt/tomcat/mytomcatInstance/conf/web.xml
The web.xml Deployment Descriptor file describes how to deploy a web application in a servlet container.
So even if my tomcat was up, my web apps could not be deployed properly.
The problems may happen because of memory issue.
java.lang.OutOfMemoryError: Java heap space
please verify the logfile, any issues related to hardware(memory).
Look in TomcatDirectory/logs/catalina.out for the logs. If the logs are too long, delete the catalina.out file and rerun the app.
In my case, the port that tomcat was running on was defined in an application.properties file for 8000, not 8080. In my case, it looked like the same problem described here. Just leaving this here in case anyone has a similar setup and issue! :)

Categories