当我试图在Eclipse中的Tomcat上运行一个简单的JSP程序时,我得到了以下错误。

Tomcat v6.0服务器在本地主机上所需的几个端口(8005、8080、8009)已经被使用。服务器可能已经在另一个进程中运行,或者某个系统进程正在使用该端口。要启动此服务器,您需要停止其他进程或更改端口号。

这是如何引起的,我该如何解决它?


当前回答

Macbook的解决方案:

步骤1:停止运行Java的服务器:

打开活动监视器到应用程序>实用程序>活动监视器。或简单按CMD +空格键,并开始键入活动监视器。 寻找运行Java的进程,并在终端中输入以下命令将其终止

kill -STOP <PID> 

其中PID是Activity Monitor中显示的Java进程的进程号。重复执行几次,然后关闭并重新打开Activity Monitor以检查Java是否正在运行。

第二步:修改端口:

在Eclipse中的服务器上右键单击“Open”。将端口号从8080修改为8081或更大的值。

这应该会启动您的服务器。

其他回答

解决问题的简单方法:

服务器可能已经在另一个进程中运行,或者某个系统进程正在使用该端口。为了关闭该端口,请执行以下操作:

1)从以下链接下载TCPView(只有285kb)。

http://technet.microsoft.com/en-in/sysinternals/bb897437.aspx

2)解压文件夹,启动TCPView应用程序。

3)右键单击java.exe(因为8009,8005端口通常被java进程使用),并选择结束进程选项。

这将很容易地停止另一个进程。

注意:运行TOMCATPATH/bin/shutdown.bat可能不会在Tomcat包含恶魔或非托管时关闭Tomcat 线程。在这种情况下,TCPView工作正常,没有任何问题。

参考以下博客“如何在不重启计算机的情况下杀死tomcat”

http://stanicblog.blogspot.fr/2012/01/how-to-kill-apache-tomcat-without.html

希望这对将来的人们有所帮助。

当Apache Tomcat不能正确终止时,即使发送了关闭指令,也会出现这个问题。在我使用Tomcat 8的情况下,这种情况经常发生,令人讨厌。幸运的是,您可以使用Windows PowerShell和netstat命令创建一个简单的脚本来终止进程。

下面的PowerShell脚本将解析netstat的输出,以找到监听127.0.0.1:8005的任何进程,提取其PID,然后杀死该进程:

netstat -a -o -n `
 | select -skip 4 `
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} `
 | ? {$_.Fields[1] -match '127\.0\.0\.1\:8005$'} `
 | % {Write-Host "Killing PID" $_.Fields[4] "..."; taskkill /F /PID $_.Fields[4] }

如果server.xml将Tomcat配置为使用不同的端口或IP,则相应地编辑脚本第四行上的正则表达式。

最后,我应该指出,Linux上的情况要好一些,因为您可以指示Tomcat在启动时将其PID保存到一个文件中,然后使用开关强制关闭—用于nix系统的关闭脚本已经具有杀死进程的能力,并且不需要使用netstat进行探测工作。

如果使用Eclipse,则双击服务器,双击tomcat服务器,然后将打开一个文件。在该文件中,将HTTP端口更改为其他端口号并保存(Ctrl+S),然后再次启动服务器。

最简单的解决方案

单行删除多个端口命令:

kill $(lsof -t -i:8005,8080,8009) 

8005、8080和8009为需要释放的端口。

或者,在linux下尝试sudo kill sudo lsof -t -i:8005。