Java 部署错误:启动Tomcat失败,服务器端口8080已在使用中

Java 部署错误:启动Tomcat失败,服务器端口8080已在使用中,java,tomcat,deployment,netbeans,Java,Tomcat,Deployment,Netbeans,当我使用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)

当我使用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已在使用中”

有什么问题吗?

转到命令提示符

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

它将终止该进程

查看您正在运行的进程,您当前的Tomcat实例似乎没有停止。它仍在运行,NetBeans尝试启动第二个Tomcat实例。
这就是出现异常的原因,您只需停止第一个实例,或者在当前运行的实例上部署代码

我在尝试部署时遇到了相同的问题,tomcat无法重新启动,因为tomcat实例正在运行。关闭IDE并检查任务管理器-杀死任何正在运行的javaw进程,这为我解决了问题。

如果在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

如果您在代理服务器后面,则可能会发生此问题 我也有同样的问题,通过以下方式解决: 首选项->常规->代理设置->无代理

“可能tomcat就绪消息已发送到代理,但从未到达IDE。”


发现:

通过在netbeans中将代理设置更改为“无代理”,tomcat问题得到解决。试试看,这很有效。

将您的
tomcat
端口地址更改为
8084
,并将
关闭端口
更改为
8025
。这将解决您的问题

在其他情况下,防病毒程序可能会导致问题。我对K7的总体安全性有这个问题。在我的例子中,K7防火墙阻塞了8084端口。简单的解决方案是在K7防火墙列表中为Netbeans添加一个异常

为此,打开K7并转到设置->防火墙设置->选择应用程序选项卡并查找Netbeans

选择Netbeans并单击编辑链接。在下一屏幕上,选择授予完全网络访问权单选按钮


现在转到Netbeans并启动服务器

杀死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

选择项目->右键单击->清理并构建,然后再次运行项目,为我解决问题即可


因为,多个进程可以绑定同一个端口,例如端口8086,在这种情况下,我必须使用PID终止该端口涉及的所有进程。这可能很麻烦

在[tomcat\u home\u dir]/conf/server.xml中更改默认端口 发现


换成

<Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />


我也有这个问题。我换了港口,做了其他事情,但他们没有帮我。在我的例子中,我在安装Netbeans之后(之前)将Tomcat连接到IDE。我刚刚卸载了Netbeans和Tomcat,然后我将Netbeans与Tomcat一起重新安装(不是单独安装)。问题解决了。

我通过将Tomcat 8.5.*替换为Tomcat 7.0.*版本来解决问题。

此错误消息也可能是由SELinux引起的。检查SELinux是否通过
getenforce

您需要调整SELinux以使用端口并重新启动


或者向nb开发人员提交一个问题,以便您和其他可能遇到此问题的人能够正确解决此问题。@Szu与linux相同one@JigarJoshi对于linux命令,我收到:“netstat:n:未知或未指令的协议”。在mac OS上
netstat tulpn | grep'8080'
谢谢Jigar Joshi。你知道为什么这个港口一直开放吗?我在停止tomcat时收到一条警告,线程http-apr-8080已启动但未关闭。当tomcat运行时,我找不到这个线程(只有http-apr-8080-exec-…)。你可以查找哪个PID持有该端口,并找出为什么它仍然运行+1。我在NetBeans中使用系统代理设置,启动Fiddler(修改系统代理设置),它工作得很好。然后重新启动NetBeans并得到“启动Tomcat失败,服务器端口8084已经在使用中。”
<Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
semanage port -a -t http_port_t -p tcp 9080 2>/dev/null || semanage port -m -t http_port_t -p tcp 9080