部署错误: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端口已被占用的主要内容,如果未能解决你的问题,请参考以下文章

配置为侦听端口 8080 的 Tomcat 连接器失败

Tomcat启动失败解决

eclipse中tomcat无法正常启动求助

ubuntu 1404部署tomcat7

linux系统,tomcat 8080端口,本机访问没问题,远程访问失败,

eclipse项目不能运行 tomcat启动失败 windows10系统