端口占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?

netstat · 浏览次数 : 16

小编点评

在处理服务器启动报错,端口占用问题时,可以尝试以下几种简单且行之有效的解决方法: 1. 强制关机:按住电源键5秒以上,使系统断电。这种方法可以清除所有缓存和进程,但可能导致数据丢失。 2. 使用netstat命令:在Windows上,可以使用netstat命令结合-Q参数来查询处于BOUND状态的进程。例如:netstat -anobq | findstr :8080。如果结果为空,说明没有找到占用8080端口的进程。 3. 修改Windows动态端口范围: - 更新winnatnet、LanmanWorkstation、WlanSvc和WwanSvc服务中的动态端口范围,以确保你的应用程序不会占用被占用的端口。 - 使用netsh命令来添加或修改动态端口范围。例如,要添加一个包含8080端口的动态端口范围,可以使用以下命令: ``` netsh int ipv4 add excludedportrange protocol=tcp startport=8080 numberofports=1 ``` - 如果使用IPv6,可以使用类似的命令来修改动态端口范围。 4. 检查并关闭其他占用端口的进程。这可能需要你查找占用8080端口的进程ID(PID),然后使用netstat命令或者PowerShell命令来关闭它。例如,使用PowerShell命令: ``` Get-NetTCPConnection | Where-Object { $_.State -eq 'Listen' } | ForEach-Object { $_.Close() } ``` 5. 如果以上方法都无法解决问题,可以考虑检查服务器的防火墙设置,确保没有阻止Tomcat或其他相关服务访问8080端口。 请注意,在执行任何更改之前,建议备份重要数据,并确保你有足够的权限来执行这些操作。

正文

最近遇到一个奇葩的问题,项目跑的好好的,没有安装其它特殊软件,突然服务器启动报错,日志如下,显然是服务器的8080端口占用了。

Caused by: java.net.BindException: Address already in use: bind
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:438)
        at sun.nio.ch.Net.bind(Net.java:430)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:225)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:218)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:194)
        at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1328)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1341)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:241)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:695)
        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11

很多同学容易想到的常规解决方法(windows上)就是使用如下命令找到对应的pid,然后进行关闭

netstat -ano | findstr :8080

但是我这边用这个命令每次的结果都是空白的,也就是无法找到占用8080端口的进程。

那么windows端口占用,netstat无法找到,我们一般可以有哪些简单和行之有效的解决方法呢?

方法1 强制关机

!!!就是按住电源键5秒以上,系统断电。
有同学问为啥正常关机不就好了吗?实际上也是经验所得,正常关机有些进程会缓存下来,占用的端口也会在重启后立马就重新占用。但是强制关机所有的进程及程序缓存都会失效。

方法2 netstat 并使用windows10新增参数-q

通过查阅官网资料,从windows10开始,新增了一个-Q的参数能够查询出一种BOUND状态下的进程,笔者无法找到的进程就是这种状态的

使用示例:
netstat -anobq | findstr :8080


官网资料:
Netstat has been updated in Windows 10 with the addition of the -Q switch to show ports that have transitioned out of time wait as in the BOUND state. An update for Windows 8.1 and Windows Server 2012 R2 has been released that contains this functionality. The PowerShell cmdlet Get-NetTCPConnection in Windows 10 also shows these BOUND ports.

Until 10/2016, netstat was inaccurate. Fixes for netstat, back-ported to 2012 R2, allowed Netstat.exe and Get-NetTcpConnection to correctly report TCP or UDP port usage in Windows Server 2012 R2. See Windows Server 2012 R2: Ephemeral ports hotfixes to learn more.

方法3 修改windows动态端口范围

有一些更新可能会使可使用端口的范围有变化,比如Hyper-v
可使用如下命令更新保留端口范围,保留端口范围应该包含你使用端口

netsh interface ipv4 show excludedportrange protocol=tcp

net stop winnat

net stop LanmanWorkstation

net stop WlanSvc

net stop WwanSvc

netsh int ipv4 add excludedportrange protocol=tcp startport=8080 numberofports=1

net start winnat

net start LanmanWorkstation

net start WlanSvc

net start WwanSvc

使用如下命令更新动态端口范围,该范围应该在你使用的端口范围外

netsh int ipv6 show dynamic tcp
netsh int ipv4 set dynamic tcp start=9001 num=16384

与端口占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?相似的内容:

端口占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?

最近遇到一个奇葩的问题,项目跑的好好的,没有安装其它特殊软件,突然服务器启动报错,日志如下,显然是服务器的8080端口占用了。 Caused by: java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind

.NET Core 在其上下文中,该请求的地址无效。

.NET Core 在其上下文中,该请求的地址无效。 看了端口,发现没被占用,后来发现是IP地址变了 改成正确的IP就可以了。

win如何根据端口号查找并杀死一个线程

查看端口占用 netstat -ano | findstr "端口号" 杀死一个进程 taskkill /pid 进程号 -f

Rapid SCADA v6安装常见问题

用了很多年的Rapid SCADA v5,现在官网已经推出了v6,就简单写一下有关v6的安装指南吧。 本指南面向Windows用户,不适用于linux用户 步骤 从官网下载Rapid SCADA最新的RC版本的v6,然后运行压缩包内的ScadaSetup.exe程序。 FAQ 提示端口占用 Rapi

[转帖]linux查看端口及端口详解

https://www.cnblogs.com/the-tops/p/6126941.html 今天现场查看了TCP端口的占用情况,如下图 红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说ESTAB

[FATAL] [DBT-06103] 端口 (1,521) 已在使用

今天参考之前文章 Oracle 19c快速安装部署 在一个新的环境进行安装时,发现配置数据库时报错1521端口被占用: [root@OEL7 media]# /etc/init.d/oracledb_ORCLCDB-19c configure Configuring Oracle Database

[转帖]记一次使用nacos2踩到的坑

https://cloud.tencent.com/developer/article/2077110?areaSource=104001.26&traceId=7WZNP412yK3vh7ebw4th0 前言 本文素材来源朋友学习nacos2.1.1踩到的坑。直接上正菜 坑点一:出现端口被占用 因

使用interface化解一场因操作系统不同导致的编译问题

场景描述 起因: 因项目需求,需要编写一个agent, 需支持Linux和Windows操作系统。 Agent里面有一个功能需要获取到服务器上所有已经被占用的端口。 实现方式:针对不同的操作系统,实现方式有所不同 linux: 使用服务器自带的 netstat 指令,然后使用 os/exec 库来调

[转帖]网络监控工具

nethogs: 按进程查看流量占用 iptraf: 按连接/端口查看流量 ifstat: 按设备查看流量 ethtool: 诊断工具 tcpdump: 抓包工具 ss: 连接查看工具 其他: dstat, slurm, nload, bmon

[转帖]解码Redis最易被忽视的CPU和内存占用高问题

https://ost.51cto.com/posts/12514 我们在使用Redis时,总会碰到一些redis-server端CPU及内存占用比较高的问题。下面以几个实际案例为例,来讨论一下在使用Redis时容易忽视的几种情形。 一、短连接导致CPU高 某用户反映QPS不高,从监控看CPU确实偏