是不是经常遇到这种情况:想启动个程序,结果提示 “端口被占用”,急得抓耳挠腮?或者服务器上连接数莫名变多,网站卡得要死,却不知道问题出在哪?其实啊,一个 netstat 命令就能搞定这些麻烦,只是新手朋友可能觉得它太 “技术”,不敢上手。今天小编就用大白话,把 netstat 的用法掰开揉碎了讲,从查看端口占用到解决 TIME_WAIT 问题,保证新手也能跟着做,希望能帮到你!
先搞明白:netstat 到底是个啥?为啥要用它?
可能有朋友会问:“netstat 这玩意儿,听起来就挺复杂,我一个新手,学它干啥?” 哎,你可别小看它,它就像网络世界的 “侦探”,能帮你查出谁在偷偷用你的端口,谁在占用你的网络连接,可有用了。
简单说,netstat 是系统自带的网络命令,不管你用的是 Windows 还是 Linux,都能找到它。它能显示当前电脑的网络连接情况、端口使用情况、协议统计信息啥的。咱们平时遇到的端口被占用、网络连接异常,基本都能靠它找出原因。
小编第一次用 netstat 的时候,也是一头雾水,输个命令都手抖,但用过几次发现,其实啊,常用的就那么几个参数,记不住也没关系,收藏这篇文章,用到的时候翻出来看看就行。
实战一:查看端口占用,谁在 “偷用” 我的端口?
这绝对是新手最常遇到的问题 —— 启动程序提示 “端口已被使用”,却不知道是哪个程序干的。用 netstat,三步就能查出来,咱们分 Windows 和 Linux 来说。
(1)Windows 系统里怎么查?
- 第一步:打开命令提示符。按下 Win+R,输入 “cmd”,回车就行,是不是很简单?
- 第二步:输入命令 “netstat -ano | findstr “端口号””。比如你想查 8080 端口,就输入 “netstat -ano | findstr “8080””,然后回车。
- 第三步:看结果。输出里有个 “LISTENING”,后面的数字就是占用端口的进程 ID,比如 “1234”。然后打开任务管理器,找到这个 ID 对应的程序,结束它就行。
小编上次帮同事查 8080 端口,就是这么操作的,查出是之前没关的 Tomcat 在占用,结束进程后,程序立马就能启动了,特管用。
(2)Linux 系统里怎么查?
Linux 里稍微有点不一样,但也不难:
- 第一步:打开终端,这个不用教了吧,跟打开记事本差不多简单。
- 第二步:输入命令 “netstat -tunlp | grep 端口号”。比如查 80 端口,就输 “netstat -tunlp | grep 80”。
- 第三步:看结果。会显示占用端口的程序名字和进程 ID,比如 “nginx 1234”,然后用 “kill -9 1234” 命令就能关掉它。
有个刚学 Linux 的朋友,就用这招解决了 Nginx 启动不了的问题,他说:“原来这么简单,之前还以为得请大神来呢。”
实战二:遇到 TIME_WAIT 太多,该怎么解决?
有时候服务器卡得厉害,用 netstat 一看,好多 “TIME_WAIT” 状态的连接,这是咋回事呢?别急,听小编给你说。
(1)先搞懂:TIME_WAIT 是啥玩意儿?
简单说,TIME_WAIT 是 TCP 连接断开后,需要保持一段时间的状态,就像关门后要等几秒再锁,防止还有数据没传完。但要是太多了,就会占用资源,导致新连接建不起来,服务器就卡了。
那为啥会太多呢?可能是程序没做好连接管理,比如频繁创建和断开连接,就像人频繁开关门,门就容易坏一样。
(2)解决方法:调整系统参数
- Windows 系统:可以改注册表,不过新手别乱改,找个懂的人帮忙。大概步骤是:打开注册表编辑器,找到对应的项,改 “TcpTimedWaitDelay” 的值,改小一点,比如 30 秒。
- Linux 系统:用命令调整,输入 “sysctl -w net.ipv4.tcp_tw_reuse=1” 和 “sysctl -w net.ipv4.tcp_tw_recycle=1”,然后再输入 “sysctl -p” 生效。这两个命令的意思,就是让系统重复利用 TIME_WAIT 的连接,不用管那么多,照着输就行。
小编之前管理的一台 Linux 服务器,TIME_WAIT 太多导致网站打不开,输了这两个命令,没一会儿就好了,特别管用。不过要注意,这只是临时解决,长远来看还是得改程序。
新手常踩的坑:这些错误别犯!
(1)命令输错了,提示 “不是内部或外部命令”
这多半是拼写错了,比如把 “netstat” 写成 “netstst”,仔细看看,改过来就行。还有可能是系统里没有这个命令,不过这种情况很少见,Windows 和 Linux 基本都自带。
(2)查不到结果,是不是命令错了?
有可能是端口没被占用,所以没结果,这时候启动程序应该没问题。要是你确定端口被占用了却查不到,试试换个参数,比如 Windows 里用 “netstat -aon”,不加 findstr,看看所有端口,说不定能找到。
(3)没有权限,命令执行不了
Linux 里可能会遇到,这时候在命令前加个 “sudo”,比如 “sudo netstat -tunlp | grep 80”,输入密码就行。就像你进某些地方要刷门禁卡,权限够了才能进。
小编的实在话
netstat 命令看着复杂,其实常用的就那么几个用法,新手朋友别怕,多试几次就熟了。查看端口占用、解决 TIME_WAIT,这两个场景掌握了,基本能应付大部分网络小问题。
平时遇到问题,别慌,打开命令提示符或终端,输几个 netstat 命令,说不定就能找到原因。要是实在搞不定,收藏这篇文章,照着步骤来,慢慢就会了。希望大家都能玩转 netstat,让网络问题少一点,顺畅多一点!