How to kill a glassfish server in Windows? - windows

I tried to start a glassfishv3 server in my windows XP system with the command "asadmin start-domain". The start failed due to a timeout. When I try to start again I get an error saying that the port 4848 is allready in use by another process. When I try to stop the server with "asadmin stop-domain" I get the error that it is not running.
Any idea how to solve this deadlock? I cannot find a Windows process with the name glassfish or asadmin to kill.

The process will be java.exe
You can use one of the sysinternals tools, like tcpview.exe for example to see which program is actually using that port.

Adding to Alexis' answer,
jps -v
will show you more about the java processes. Note the pid. You must have configured your path correctly for this to work.
Then do
taskkill /pid <pid>

You can also use jps to list all the Java processes on you machine. The GlassFish server main class is called ASMain

Related

Terminating port of spring boot application in Eclipse

Terminated by clicking on Red Icon in console tab but when I rerun it is saying port is already in use.
I terminated port using Taskkill command in command prompt. Any suggestions on terminating it from Eclipse would be helpful instead of command prompt
Usually terminating application from Eclipse helps. Sometimes, though, it doesn't help. In such cases, I have to restart the eclipse. Unfortunately, I don't have any better solution. There might be something wrong with your application, if this issue happens too often for you. Eclipse usually tries to "gracefully" shut down the application and release resources, before shutting down the server. Maybe during this time the application "hangs" and doesn't respond. There could be many reasons for that. One of them: your application doesn't close file resources correctly, with try... finally, and so on.
To summarise: In 95% of the cases, shutting down the server from eclipse works. If it doesn't, then you have to restart the eclipse, or maybe even kill the process from the command-line. If it happens too often, let's say in 50% of the cases, then there is something wrong with your application.
Open Eclipse
Go to Servers panel
Right click on Tomcat Server select Open, Overview window will appear.
Open the Portstab. You will get the following:
Tomcat adminport
HTTP/1.1
AJP/1.3
I changed the port number of HTTP/1.1 (i.e. to 8081)
You might have to also change the port of Tomcat adminport (i.e. to 8006) and of AJP/1.3 (i.e. to 8010).
Access your app in the browser at http://localhost:8081/...
I found the best way to stop spring from holding the port was to write a script that looks for the process holding the port and auto kill it. Then attach that script to an external tool job in eclipse. I adapted a powershell script I found. Called it kill-port.ps1 and is located in base of the report where I had the issue.
param ($port)
$foundProcesses = netstat -ano | findstr :$port
$activePortPattern = ":$port\s.+LISTENING\s+\d+$"
$pidNumberPattern = "\d+$"
IF ($foundProcesses | Select-String -Pattern $activePortPattern -Quiet) {
$matches = $foundProcesses | Select-String -Pattern $activePortPattern
$firstMatch = $matches.Matches.Get(0).Value
$pidNumber = [regex]::match($firstMatch, $pidNumberPattern).Value
taskkill /pid $pidNumber /f
}
Then set up an external tool configuration
Location: C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe
Argument: ${workspace_loc:/workspacename/kill-port.ps1} 8080
Now I just run the kill command after each test where I know it leaves the port bond to a process. Not the most elegant but easier then running a few commands in a shell. This is windows specific but I am sure the same type script can be created for Unix.

How can I identify which process is using port 18780 on Windows?

I have an internal web application listening on all IPs on port 18780. When I try to start the application on a new Windows VM it throws this exception:
System.ServiceModel.AddressAlreadyInUseException: There is already a listener on IP endpoint 0.0.0.0:18780
After rebooting the machine the application starts just fine, but I'd like to avoid having to reboot all of my new QA environments before I can use them.
IANA reports that nothing well-known uses port 18780.
The last time this happened I tried to identify what process was running on that port:
Running Get-Process -Id (Get-NetTCPConnection -LocalPort 18780).OwningProcess returned Cannot find a process with the process identifier 7188. Powershell is running under a local admin account.
So what's happening here? It looks like there's something using that port, it's got a process Id, but I'm unable to get the details of it. Running this powershell command a second time reports that there's nothing listening that port. Does the act of observation change Windows processes?
What further steps can I take to find out more about Schrödinger's process?
Caught this happening again.
Turns out that my application had spawned three child processes, and those were still running. Windows apparently doesn't release a TCP port until the owning process record is cleaned up, and child processes maintain this record. Even though the parent process was stopped, and showed in TCPViewer as <non-existent>, the port was still unavailable.
This is also described here: https://serverfault.com/questions/181015/how-do-you-free-up-a-port-being-held-open-by-dead-process
I used wmic process where (ParentProcessId=7188) get Caption,ProcessId to identify which child processes to kill, and that did the trick. Windows released the port straight away.
try following in powershell:
netstat -ano | findstr :<port>
this will give you the details about the process id
then use following to kill the process:
taskkill /PID <processid> /F

"Address already in use: bind" when running Spring Boot application

I have a problem with running my sample Spring Boot Application.
When I try to run it, this error occurs:
java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:473)
o.apache.catalina.core.StandardService : Failed to initialize connector [Connector[org.apache.coyote.http11.Http11NioProtocol-8080]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[org.apache.coyote.http11.Http11NioProtocol-8080]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.startup.Tomcat.start(Tomcat.java:335)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:57)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:52)
at
Is it ok the first time you run it, and run it again you get an error?
If this is the case, You need to stop service before running again.
Here is a way to stop.
Click the stop button that looks like this:
"Address already in use" means, there is already another application running on port 8080. Use your OS tools to find that process and end it, before you start your application, or let your application run on another port. If you use an embedded server in your Boot application, you can specify the following property:
server.port=8085
Of course you can choose whatever port you want.
I have a very simple solution:
As the answer above stated, when you start Spring Boot app, the PID of underneath server(Tomcat or Undertow, or whatever) will be shown in the console; you may start again the app without terminating the former one, especially when you are in debug mode, thus the error. This applies to Intellij, too.
But, if you have started again, the PID is no longer available for you because previous session output is cleared.
So, if you are using Eclipse, just close it, and open Task Manager to terminate other java.exe JVM process. Be sure that you have no other JVM-based services running which cannot be stopped. (Like Kafka server, Apache Storm, etc.)
The Tomcat instance is one of them.
Log shows that server is already started on port 8080. I faced the same problem. go to windows task manager and end process that is javaw.exe, it worked on my application.
Two possibilities
P1.Another Application is using port 8080
Solution:-
a.Stop that application and free port 8080 for your application.
b.Change your application server port, for that create a file named
application.properties in resource folder and add property
server.port = 8085
(8085 can be replaced by any port number of your choice which will not conflict with other
application server ports)
location of application.properties file
snippet of application.properties file
P2. Your application is already running
Solution
a. Pretty simple solution for this situation is stop your currently
running application and rerun it
b.If you want to run multiple instances of your application then keep
current application running change server port as explained above and
run the application the new instance will run of another port.
Even I faced this issue u can just stop the application(there is a stop button on the top toolbar) and restart again it worked for me and I used STS
In the Eclipse situation, check if there are items running in the window "Progress"(Windows > Show View > Progress)
Stop the running process, which might be locking your desired port.
Got the same error.
The springboot application has inbuilt tomcat server which runs on port 8080..if you have any other process currently running on port 8080,The java.net.BindException will raise..so kill the processes which are using 8080 thorugh cmd as follows:
-->
open command prompt as Administrator.
--> netstat -ano | findstr :<PORT>
netstat -ano | findstr :8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10568
TCP [::]:8080 [::]:0 LISTENING 10568
-->taskkill /PID <PID> /F
taskkill /PID 10568 /F
Now if you want recheck your running process by using netstat -ano | findstr :8080 command..
and again restart or rerun our application..
This is for first ever time you wanted to run springboot application.
Hope this might be helpfull,worked for me :)
Second case:
In the first time you run ok right? and run again it got an error? If right, You need stop service before run again..if it is the case follow #Sang9xpro
answer above.
Seems your server is already up. If you are using linux based system, type following command in terminal to check which port is active on your system.
"ps -ef | grep 8080"(or whatever port is mentioned)
Now you need to kill this one if you wish to run the server on same port.
kill -9 8080
Voilla!! Try booting your application once again and it will work.
Extra:
You'll come to me complaining an important application is already listening on mentioned port(8080) and you do not want to kill it. No probs.
Create an application.properties file inside your resource folder and change port to whatever you like.
server.port = 8081
Voilla!! You did it!! :)
Let me know if further clarifications required.
This is because you have run the spring boot application once in your eclipse IDE and closed the application and you assume that the embedded server is stopped. But it is not the case. Even after you closed your application in Eclipse -> Console window, embedded tomcat server is running. What you can do is, run your spring boot application again and look at the console messages. Immediately after Spring Logo, you can find Starting on with PID 16676. This is the PID you need to search in "Wndows Task Manager -> Processes -> PID". Select that process and "End Task". Now if you start your spring boot application, it will start without issues.

Restarting Hudson on Windows

I've been having an issue with Hudson on windows.
Whenever I update Hudson or a plugin I get the option to restart when no jobs are running.
If I click this button Hudson hangs and doesn't restart. I've tried restarting the Hudson service but this doesn't help, so end up having to reboot the box to bring Hudson back online.
I've just updated to the most recent version, but didn't click the restart button and it's now vanished.
Is there a correct way to restart Hudson on windows?
Cheers
Tom
I have a this problem once in a while too. For some reason the Hudson server does not shut down completely and the server that starts up, can not use the port. To fix that problem, I run `netstat -n -o'. This way I can find out the process ID that holds the port and kill that app through taskmanager. Now I can restart the service and Hudson comes up fine.
For the last few weeks I had a similar problem. The description says, that it restarts the app, when no processes are running. I missed out on one job that was hold in the build queue and because of a faulty configuration never actually build, therefore preventing Hudson from restarting.
After all of your jobs are finished and your server does not restart. Just visit the restart page again http://server:port/restart and try to restart again. If that doesn't work stop the service and start it again.
UPDATE:
Since I grew tired of physically logging into the Hudson/Jenkins server, I now use following commands to run the kill remotely. These commands assume that you run the service with a dedicated user (e.g. JenkinsUser). If another process running with the same credentials than the service does and might start java.exe, you need to run the netstat which needs to be executed locally on the Jenkins server or by using rexec (this was not an option for me).
:: get the pid of jenkins java.exe
tasklist /S %JENKINSSERVER% /FI "IMAGENAME eq java.exe" /FI "USERNAME eq %DOMAIN\USERNAME%"
:: terminate process use pid from previous command (instead of 1234)
taskkill /S %JENKINSSERVER% /F /T /PID 1234
:: stop the Jenkins service (just in case the service is hanging)
sc \\%JENKINSSERVER% stop Jenkins
:: start the Jenkins service again
sc \\%JENKINSSERVER% start Jenkins
If I have to much time, I might create a script out of it.
If the Slave node has the slave.jar used as a windows service, that service is defined as "Automatic".
It means it will try to contact the master periodically if the connection has been severed.
You shouldn't click on anything on the server side (in the Node definition) to restart said Node: it should be back online automatically.
If you've installed Jenkins on a TomCat server, one alternative solution is to simply restart your Apache TomCat service.

Tomcat failed to shutdown

When I add the following Java options to enable debugging:
JAVA_OPTS="$JAVA_OPTS -noverify -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
I get the following error whenever I try to shutdown the tomcat:
ERROR: transport error 202: bind failed: Address already in use ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initializedFATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
Thank you for a nice short explanation, PHeath! Following your advice, I found the best way to solve the problem is simply to use CATALINA_OPTS instead of JAVA_OPTS.
Looking into catalina.sh, one can see CATALINA_OPTS is only used by the "start" and "start-security" commands, whereas JAVA_OPTS is also used by the "stop" command (at least with Tomcat 6.0.33 on openSUSE 12.1).
At least if you have Tomcat installed on Linux using a package manager then modifying the CATALINA_OPTS variable in /etc/tomcat6/tomcat6.conf (or whatever path in your distribution) is cleaner than changing the catalina.sh script directly, for the package manager assumes that the user changes only configuration files and breaking this assumption may cause problems when upgrading the Tomcat packages (e. g. lost settings because the catalina.sh file is overwritten).
I think one should prefer CATALINA_OPTS over JAVA_OPTS not only for JDWP but for many other options as well: e. g. if one uses the heap size option -Xmx... then it would be reasonable to put it into CATALINA_OPTS, as the "stop" command does not need much heap.
You are trying to debug tomcat on startup, so it binds to port 5005 when the jvm starts.
When you run catalina.sh stop, it starts up another jvm which also tries to bind to port 5005.
You need to move the debug args to the run and start arguments (in catalina.sh) of tomcat, putting them straight into the JAVA_OPTS is the cause of the issue you're having.
The problem is your tomcat is still running on the debug port(5005) or some other service running on the same port(5005).
If tomcat still running, you can kill it
if it in linux environment ps -ef|grep java, and identify the process id of it. and kill the process using sudo kill -9 .
If it in windows environment got to task manager and kill the tomcat and java process.
Now you should be able to start the server in debug mood without any prob.
This can happen on debugging unit test through the tool(eclipse) which has been executed through the maven. To sole this you can flow the same process.
First close the Eclipse and kill the java process as well and start it again.
This is due to both applications are listening the same port number i.e 8000 while running in debug mode.
One quick solution is change the debug port to 8001 in startup.bat
SET DEBUGPORT=8001
It seems that the port 5005 is already in use. Check open ports with netstat command.
This may be because you already opened tomcat. Check your processes.
It appears you are starting Tomcat with the Debugger enabled, This causes the JVM to attach to the Process for Debugging, However in the catalina.sh there is a case statement for start, stop, restart, so on and so forth. Issuing the stop command still adds this in as it is part of your Global JAVA_OPTS and tries to start the debugger listening on the same port for the shutdown command. If you remove the address=50005 from your JAVA_OPTS or use the start jdpa commands to start the VM with the debugger this will fix your problem.
Look at the default catalina.sh in the latest Tomcat distribution if you need a clean copy. It sounds like someone has made changes inside yours that are invalid and causing JDPA to run on start, stop, any command issued.
set JPDA_ADDRESS=8001 in catalina.bat i.e debug port
and change all 3 ports in server.xml
In my case (Tomcat installed form tarball) I had those debug options unintentionally set in my env. This fixed the error:
$ unset JAVA_OPTS

Resources