部署错误:Tomcat启动失败,服务器8080端口已被占用
Posted
技术标签:
【中文标题】部署错误:Tomcat启动失败,服务器8080端口已被占用【英文标题】:Deployment error:Starting of Tomcat failed, the server port 8080 is already in use 【发布时间】:2011-07-15 17:17:07 【问题描述】:当我使用 Netbeans 运行我的 Java 项目时,我收到以下错误:
Deployment error:
Starting of Tomcat failed, the server port 8080 is already in use.
See the server log for details.
at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:166)
at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:104)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor619.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:277)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:460)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)
Caused by: org.netbeans.modules.j2ee.deployment.impl.ServerException: Starting of Tomcat failed, the server port 8080 is already in use.
at org.netbeans.modules.j2ee.deployment.impl.ServerInstance._start(ServerInstance.java:1297)
at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.startTarget(ServerInstance.java:1251)
at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.startTarget(ServerInstance.java:1062)
at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.start(ServerInstance.java:939)
at org.netbeans.modules.j2ee.deployment.impl.TargetServer.startTargets(TargetServer.java:428)
at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:143)
... 16 more
BUILD FAILED (total time: 4 seconds)
我尝试将服务器端口更改为 8081 并在工具->服务器中关闭端口。它运行良好,但如果我执行任何操作并运行项目,它会再次显示“部署错误:Tomcat 启动失败,服务器端口 8081 已在使用中”
会有什么问题?
【问题讨论】:
【参考方案1】:我尝试了 No Proxy Settings ,杀死了进程 id 。有时他们确实工作,但不幸的是他们这次没有。所以我尝试了以下方法。 在 NetBeans 的服务选项卡中 - 右键单击 Apache Server 版本 - 平台选项卡 - 取消选中“使用 IDE 代理设置”。这解决了我的问题。
【讨论】:
【参考方案2】:此错误消息也可能是由 SELinux 引起的。检查是否使用getenforce
启用了 SELinux
您需要调整 SELinux 以使用您的端口并重新启动。
I.E.
semanage port -a -t http_port_t -p tcp 9080 2>/dev/null || semanage port -m -t http_port_t -p tcp 9080
【讨论】:
【参考方案3】:我通过将 Tomcat 8.5.* 替换为 Tomcat 7.0.* 版本解决了这个问题。
【讨论】:
【参考方案4】:我也有这个问题。我改变了端口并做了其他事情,但他们没有帮助我。就我而言,我在安装 Netbeans 之后(之前)将 Tomcat 连接到 IDE。我刚刚卸载了 Netbeans 和 Tomcat,然后我重新安装了 Netbeans 和 Tomcat(不单独)。问题就解决了。
【讨论】:
【参考方案5】:将您的Tomcat
端口地址更改为8084
,将Shut Down Port
更改为8025
。这将解决您的问题。
在其他情况下,防病毒程序可能会导致问题。我在 K7 Total Security 上遇到了这个问题。在我的情况下,K7 防火墙阻止了 8084 端口。简单的解决方案是在 K7 防火墙列表中为 Netbeans 添加一个例外。
为此,打开 K7 并转到 设置 -> 防火墙设置 -> 选择 应用程序选项卡并找到 Netbeans。
选择 Netbeans 并单击 编辑 链接。在下一个屏幕上选择授予完全网络访问权限单选按钮。
现在转到 Netbeans 并启动服务器。
【讨论】:
【参考方案6】:在 [tomcat_home_dir]/conf/server.xml 中更改您的默认端口 找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改成
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
【讨论】:
【参考方案7】:选择项目 -> 右键单击 -> clean and build 然后再次运行项目,为我解决问题。
因为,多个进程可以绑定同一个端口,例如端口 8086,在这种情况下,我必须使用 PID 杀死与该端口相关的所有进程。那可能很麻烦。
【讨论】:
【参考方案8】:杀死之前的tomcat实例或在8080上运行的进程。
转到终端并执行以下操作:
lsof -i :8080
输出将类似于:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 76746 YourName 57u IPv6 0xd2a83c9c1e75 0t0 TCP *:http-alt (LISTEN)
使用它的 PID 杀死这个进程:
kill 76746
【讨论】:
【参考方案9】:如果在 Linux 上,您可以使用此脚本杀死现有的 Tomcat
#/bin/bash
if [ `whoami` != root ]; then
echo "Please run this script as root or using sudo"
exit
fi
echo
echo "finding proceses that have name java and established connections status"
echo
echo "Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name"
netstat --tcp --programs | grep "ESTABLISHED" | grep "java"
echo
echo "finding proceses that use port 8080 or http-alt"
echo
netstat --tcp --programs | grep ':8080\|:http-alt'
echo -n "Do you wish to kill a process listed above?[Y/n]"
read choose
if [ "$choose" = "Y" ] || [ "$choose" = "y" ] || [ -z "$choose" ]
then
echo "enter pid to kill"
read procesId
kill -9 $procesId
fi
echo "done exiting"
exit 0
【讨论】:
【参考方案10】:通过在 netbeans 中将代理设置更改为“无代理”,tomcat 问题得到了解决。试试这个,它确实有效。
【讨论】:
【参考方案11】:如果您使用代理服务器,则可能会发生此问题 我有同样的问题,并通过以下方式解决: 首选项 -> 常规 -> 代理设置 -> 无代理。
“也许 tomcat 就绪消息已发送到代理 - 并且从未到达 IDE。”
找到@:https://netbeans.org/bugzilla/show_bug.cgi?id=231220
【讨论】:
+1 我在 NetBeans 中使用系统代理设置,启动了 Fiddler(它修改了系统代理设置),它工作得很好。然后重新启动NetBeans,出现“启动Tomcat失败,服务器8084端口已经在使用中。”【参考方案12】:转到命令提示符
netstat -aon
Linux
netstat -tulpn | grep 'your_port_number'
它会显示类似的东西
TCP 192.1.200.48:2053 24.43.246.60:443 ESTABLISHED 248
TCP 192.1.200.48:2055 24.43.246.60:443 ESTABLISHED 248
TCP 192.1.200.48:2126 213.146.189.201:12350 ESTABLISHED 1308
TCP 192.1.200.48:3918 192.1.200.2:8073 ESTABLISHED 1504
TCP 192.1.200.48:3975 192.1.200.11:49892 TIME_WAIT 0
TCP 192.1.200.48:3976 192.1.200.11:49892 TIME_WAIT 0
TCP 192.1.200.48:4039 209.85.153.100:80 ESTABLISHED 248
TCP 192.1.200.48:8080 209.85.153.100:80 ESTABLISHED 248
检查哪个进程绑定了您的端口。在上面的示例中,如果您确定需要终止该进程,则现在是 248
Linux:
kill -9 248
窗户:
taskkill /f /pid 248
它会杀死那个进程
【讨论】:
@Szu 同linux one @JigarJoshi 对于我收到的 linux 命令:“netstat: n: unknown or uninstrumented protocol”。 在 Mac OS 上netstat tulpn | grep '8080'
感谢 Jigar Joshi。知道为什么这个端口首先保持开放吗?停止 tomcat 时,我收到一条警告,指出线程 http-apr-8080 已启动但未关闭。当tomcat运行时我找不到这个线程(只有http-apr-8080-exec-...)。
您可以查看哪个 PID 持有该端口并找出它仍在运行的原因【参考方案13】:
我在尝试部署时遇到了同样的问题,tomcat 无法重新启动,因为 Tomcat 实例正在运行。关闭 IDE 并检查 TASk 管理器 - 杀死任何正在运行的 javaw 进程,这为我解决了问题。
【讨论】:
【参考方案14】:查看您正在运行的进程,您当前的 Tomcat 实例似乎没有停止。它仍在运行,NetBeans 尝试启动第二个 Tomcat 实例。 这就是你的异常的原因,你只需要停止第一个实例,或者在当前运行的实例上部署你的代码
【讨论】:
或向 nb 开发人员提出问题,以便为您和可能遇到此问题的任何其他人妥善解决。以上是关于部署错误:Tomcat启动失败,服务器8080端口已被占用的主要内容,如果未能解决你的问题,请参考以下文章