JVM_Bind端口8080已被占用 -- 但是该端口上没有任何进程

4
在我的项目上尝试运行“mvn grails:run-app”时,我遇到了JVM_Bind错误,提示8080端口已被占用。在Eclipse崩溃之前,我一直都没有问题地运行这个项目。我已经重新启动了我的机器两次,但仍然无法解决这个问题。使用Netstat(netstat -ano)查看8080端口,显示nothing。我的Tomcat服务器运行在8088端口上,如果我重新配置它以在8080端口上运行,则可以正常工作,因此该端口未被使用。只有Maven和/或Grails出现了这个错误。有什么办法可以解决这个问题吗?
$ netstat -ano

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       752
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:623            0.0.0.0:0              LISTENING       7056
  TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       832
  TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING       960
  TCP    0.0.0.0:1027           0.0.0.0:0              LISTENING       904
  TCP    0.0.0.0:1028           0.0.0.0:0              LISTENING       1128
  TCP    0.0.0.0:1033           0.0.0.0:0              LISTENING       888
  TCP    0.0.0.0:1034           0.0.0.0:0              LISTENING       5548
  TCP    0.0.0.0:2701           0.0.0.0:0              LISTENING       4788
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       1688
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1452
  TCP    0.0.0.0:4369           0.0.0.0:0              LISTENING       3644
  TCP    0.0.0.0:5357           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:5432           0.0.0.0:0              LISTENING       3604
  TCP    0.0.0.0:5672           0.0.0.0:0              LISTENING       3544
  TCP    0.0.0.0:8081           0.0.0.0:0              LISTENING       2928
  TCP    0.0.0.0:15672          0.0.0.0:0              LISTENING       3544
  TCP    0.0.0.0:16992          0.0.0.0:0              LISTENING       7056
  TCP    0.0.0.0:25672          0.0.0.0:0              LISTENING       3544
  TCP    10.0.0.252:139         0.0.0.0:0              LISTENING       4
  TCP    10.0.0.252:1060        74.125.22.188:5228     ESTABLISHED     7144
  TCP    10.0.0.252:1062        168.159.224.143:443    ESTABLISHED     6316
  TCP    10.0.0.252:55861       208.43.253.206:443     ESTABLISHED     7136
  TCP    10.0.0.252:57299       141.101.112.192:443    CLOSE_WAIT      8160
  TCP    10.0.0.252:57300       141.101.112.192:443    CLOSE_WAIT      8160
  TCP    10.0.0.252:57301       141.101.112.192:443    CLOSE_WAIT      8160
  TCP    10.0.0.252:57385       23.196.34.134:443      ESTABLISHED     7144
  TCP    10.0.0.252:57430       208.43.253.206:443     CLOSE_WAIT      7136
  TCP    10.0.0.252:57435       173.194.121.0:80       ESTABLISHED     7144
  TCP    10.0.0.252:57442       173.194.121.14:443     ESTABLISHED     7144
  TCP    10.0.0.252:57447       64.86.202.11:80        ESTABLISHED     7144
  TCP    10.0.0.252:57456       168.159.218.174:443    ESTABLISHED     6316
  TCP    10.0.0.252:57462       190.93.244.58:80       ESTABLISHED     7144
  TCP    10.0.0.252:57463       74.125.228.217:80      TIME_WAIT       0
  TCP    10.0.0.252:57470       23.196.2.197:80        ESTABLISHED     7144
  TCP    127.0.0.1:1029         0.0.0.0:0              LISTENING       2028
  TCP    127.0.0.1:1030         127.0.0.1:4369         ESTABLISHED     3544
  TCP    127.0.0.1:1035         127.0.0.1:62522        ESTABLISHED     7416
  TCP    127.0.0.1:1036         0.0.0.0:0              LISTENING       7136
  TCP    127.0.0.1:1164         0.0.0.0:0              LISTENING       996
  TCP    127.0.0.1:1165         0.0.0.0:0              LISTENING       7056
  TCP    127.0.0.1:2559         0.0.0.0:0              LISTENING       7060
  TCP    127.0.0.1:4369         127.0.0.1:1030         ESTABLISHED     3644
  TCP    127.0.0.1:55018        0.0.0.0:0              LISTENING       3112
  TCP    127.0.0.1:62522        0.0.0.0:0              LISTENING       1348
  TCP    127.0.0.1:62522        127.0.0.1:1035         ESTABLISHED     1348
  TCP    [::]:80                [::]:0                 LISTENING       4
  TCP    [::]:135               [::]:0                 LISTENING       752
  TCP    [::]:445               [::]:0                 LISTENING       4
  TCP    [::]:623               [::]:0                 LISTENING       7056
  TCP    [::]:1025              [::]:0                 LISTENING       832
  TCP    [::]:1026              [::]:0                 LISTENING       960
  TCP    [::]:1027              [::]:0                 LISTENING       904
  TCP    [::]:1028              [::]:0                 LISTENING       1128
  TCP    [::]:1033              [::]:0                 LISTENING       888
  TCP    [::]:1034              [::]:0                 LISTENING       5548
  TCP    [::]:2701              [::]:0                 LISTENING       4788
  TCP    [::]:3306              [::]:0                 LISTENING       1688
  TCP    [::]:3389              [::]:0                 LISTENING       1452
  TCP    [::]:5357              [::]:0                 LISTENING       4
  TCP    [::]:5432              [::]:0                 LISTENING       3604
  TCP    [::]:5672              [::]:0                 LISTENING       3544
  TCP    [::]:8081              [::]:0                 LISTENING       2928
  TCP    [::]:16992             [::]:0                 LISTENING       7056
  TCP    [::1]:1166             [::1]:1168             ESTABLISHED     7056
  TCP    [::1]:1168             [::1]:1166             ESTABLISHED     7056
  UDP    0.0.0.0:123            *:*                                    1092
  UDP    0.0.0.0:500            *:*                                    1128
  UDP    0.0.0.0:3702           *:*                                    1092
  UDP    0.0.0.0:3702           *:*                                    4152
  UDP    0.0.0.0:3702           *:*                                    1092
  UDP    0.0.0.0:3702           *:*                                    4152
  UDP    0.0.0.0:4500           *:*                                    1128
  UDP    0.0.0.0:5355           *:*                                    1452
  UDP    0.0.0.0:8082           *:*                                    2928
  UDP    0.0.0.0:54654          *:*                                    4152
  UDP    0.0.0.0:54960          *:*                                    7144
  UDP    0.0.0.0:59195          *:*                                    1092
  UDP    0.0.0.0:63291          *:*                                    1092
  UDP    10.0.0.252:137         *:*                                    4
  UDP    10.0.0.252:138         *:*                                    4
  UDP    127.0.0.1:48000        *:*                                    7060
  UDP    127.0.0.1:49153        *:*                                    3604
  UDP    127.0.0.1:61532        *:*                                    6316
  UDP    [::]:123               *:*                                    1092
  UDP    [::]:500               *:*                                    1128
  UDP    [::]:3702              *:*                                    4152
  UDP    [::]:3702              *:*                                    4152
  UDP    [::]:3702              *:*                                    1092
  UDP    [::]:3702              *:*                                    1092
  UDP    [::]:4500              *:*                                    1128
  UDP    [::]:8082              *:*                                    2928
  UDP    [::]:54655             *:*                                    4152
  UDP    [::]:59196             *:*                                    1092
  UDP    [::]:63292             *:*                                    1092

你尝试过通过eclipse清理项目并重新运行吗?你尝试过直接从控制台运行它吗(请原谅我的无知,我不确定mvn grails:run-app是什么,我猜想这意味着你正在通过另一个程序运行它。如果你已经重新启动并仍然有错误,我的猜测是与eclipse有关)。如果所有这些都不起作用,我还会再次检查并终止任何可能正在运行的java进程(过度杀伤力仍然是死的,对吧?)。 - Ted Delezene
是的,我已经执行了clean package,并且也从命令行运行了,但结果相同。没有Java进程——我已经重新启动了两次,但每次都会执行ps -eaf以确保(我还检查了任务管理器)。这真是一个难题。我在想JDK是否损坏了,所以下一步我将尝试重新安装。如果您有其他想法,我很乐意尝试 :) - JenVander
如果您编辑问题以包括实际运行的netstat命令及其生成的输出以验证您是否正确解释它,那将是很好的。根据您的描述,在Unix上,我的下一步将是在strace进程时产生错误,以查看触发JVM错误的实际系统调用。在Windows上,这些看起来很有前途,可以用于此类故障排除:https://dev59.com/32865IYBdhLWcg3wYNZS - Kenster
当然没问题——已完成。虽然我非常有信心认为IP地址问题是问题所在,而错误信息只是不够清晰和误导性的。将此编辑保存下来,因为它可能会帮助未来的访问者。 - JenVander
2个回答

2
问题不是端口已被占用,而是 IP 地址无效。我重新连接了 VPN,DHCP 给了我一个新的 IP 地址。我的 Grails 应用程序中绑定的是旧的 IP 地址。将其更改为新的有效 IP 地址即可解决问题。为了验证这一点,我将 Grails IP 绑定修改为已知的无效 IP 地址,这样就能再现问题。这是一个错误消息不明确或误导的情况。通常,此错误是由进程卡住端口引起的,但在我的情况下,如我的 netstat 输出所示,那不是问题所在。因此,如果其他人也遇到这个问题,请检查端口和 IP 地址。

2
绑定错误是由于某个进程仍在使用相应的端口,包括已经死亡但在系统中失踪的僵尸进程所引起的。重新启动可以清除这种情况,但我不赞成这种解决方案。你可以使用netstat命令(在Windows、Linux和Mac上都是同一个命令)来查找僵尸进程。你需要的是netstat命令,你需要查看每个操作系统的文档(尝试netstat -?),但通常你要找的是netstat -a,它会列出所有正在使用的端口。我们最感兴趣的是那些处于LISTENING状态的端口,这意味着有东西绑定了该端口以进行监听,其中包括你的8080端口。再次说明,你需要查看命令选项,因为每个操作系统都有不同的选项,可以让你显示PID(进程ID)。然后你可以使用"任务管理器"/"活动监视器"/"top"应用程序将PID与正在运行的应用程序匹配,并杀死该应用程序。在Mac中,你还需要使用下面的命令来获取PID:lsof -i -U -P | grep "LISTEN"。一旦你杀死了那个进程,你的端口就会变得可用,你就可以运行你的程序,而不会出现JVM_Bind问题。另外需要注意,Java不会绑定像1200这样的端口,除非你以管理员/根用户身份运行。但是你的8080应该没问题。

虽然这是一个很好的标准响应,也是更常见的根本原因,但在这种情况下并不是根本原因。没有进程绑定到该端口 - 看起来是一个错误的IP地址加上一个误导性的错误消息。 - JenVander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接