【发布时间】:2012-02-07 16:54:18
【问题描述】:
我正在 Windows 环境中开发 Java EE 应用程序。 (我使用的是 Windows 7)
我正在使用 Tomcat 服务器,不幸的是端口号 8080 正忙(由 Oracle 使用)。现在我想为 Tomcat 分配一个不同的端口。
所以在更改 conf/server.xml 文件之前,我想确保某个端口没有被任何其他进程占用并且它是空闲的。
【问题讨论】:
标签: windows networking
我正在 Windows 环境中开发 Java EE 应用程序。 (我使用的是 Windows 7)
我正在使用 Tomcat 服务器,不幸的是端口号 8080 正忙(由 Oracle 使用)。现在我想为 Tomcat 分配一个不同的端口。
所以在更改 conf/server.xml 文件之前,我想确保某个端口没有被任何其他进程占用并且它是空闲的。
【问题讨论】:
标签: windows networking
您可以使用“netstat”来检查端口是否可用。
使用netstat -anp | find "port number" 命令查看端口是否被另一个进程占用。如果它被另一个进程占用,它将显示该进程的进程ID。
您必须在端口号之前加上 : 才能获得实际输出
前
netstat -anp | find ":8080"
【讨论】:
我是netstat -ano|findstr port no
结果将在最后一列显示进程 ID
【讨论】:
netstat -ano|findstr 3306 运行此命令时没有任何反应
netstat -ano | find ":3306"
netstat -ano|find ":port_no" 会给你名单。
a:显示所有连接和监听端口。
n:以数字形式显示地址和端口号。
o:显示与每个连接关联的拥有进程 ID。
示例:netstat -ano | find ":1900"
这会给你这样的结果。
UDP 107.109.121.196:1900 *:* 1324
UDP 127.0.0.1:1900 *:* 1324
UDP [::1]:1900 *:* 1324
UDP [fe80::8db8:d9cc:12a8:2262%13]:1900 *:* 1324
【讨论】:
> nestat -ano | find ":443" 给netstat: illegal option -- o
它是 (Get-NetTCPConnection -LocalPort "端口号").OwningProcess
【讨论】:
如果您更喜欢 Powershell,请使用它。您将获得进程的名称。
PS C:\Users\Administrator> Get-Process -Id (Get-NetTCPConnection -LocalPort 9093).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
6021 1464 2760976 2131548 290.39 25512 2 java
PID 在Id 列中,它还提供进程名称。
如果没有进程正在使用此端口,您会收到一条红色错误消息。
如果你想杀死 PID 25512 的进程,使用
taskkill /PID 25512 /F
/F表示强制,有些进程没有/F是无法杀死的
【讨论】:
如果这纯粹是本地问题,例如您想在本地运行 tomcat 来测试您正在处理的应用程序,通常可以配置端口0。在这种情况下,当应用程序端口绑定时,操作系统将为其分配一个随机的“临时”端口,希望它注销。
您必须检查 tomcat 是否支持它,但我希望它会得到past answers mentioning it。
它避免了硬编码端口和TOCTOU 的问题,尽管它显然不太方便,因为您每次都需要获取需要连接的端口。
另一种方法是尝试一堆免费端口,例如8000[0] 和 8888 是 HTTP 服务器的常用备用端口。 8008 也是一个官方 IANA 备用端口,但我不记得曾经使用过它。
[0] 虽然正式分配给 iRDMI
【讨论】: