linux上使用netstat察看mysql端口和连接

本文介绍如何使用netstat命令监控Linux系统中MySQL服务的端口及连接状态,包括监听端口的查看、连接状态的分析等技巧。

linux上使用netstat察看mysql端口和连接

近日发现写的一个java程序的数据库连接在大压力下工作不打正常,因此研究了一下dbcp,中间为了查看mysql服务器的数据库连接情况,需要使用 netstat来查看端口和连接, 将使用到的命令整理了一下备忘, 这些命令同样可以用于查看其他运用程序的端口和连接情况.

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息,这里我只用到其中的部分功能.

直接输入netstat,显示
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     
tcp        0      0 localhost:41144         localhost:41147         ESTABLISHED
tcp        0      0 localhost:21576         localhost:21579         ESTABLISHED
tcp        0      0 linux.local:telnet      10.3.18.129:nbx-au      ESTABLISHED
tcp        1      0 localhost:39706         localhost:58099         CLOSE_WAIT 
......
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    910    /var/named/dev/log
unix  2      [ ]         DGRAM                    908    /var/lib/dhcp/dev/log
unix  8      [ ]         DGRAM                    906    /dev/log
.....

输出结果可以分为两个部分,一个是Active Internet connections,另一个是Active UNIX domain sockets.

netstat 的常用参数: - t、- u、- w和- x分别表示TCP、UDP、RAW和UNIX套接字连接。-a标记,还会显示出等待连接(也就是说处于监听模式)的套接字。-l 显示正在被监听(listen)的端口, -n表示直接显示端口数字而不是通过察看/etc/service来转换为端口名,-p选项表示列出监听的程序

1) netstat -tl
查看当前tcp监听端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     
tcp        0      0 *:rrac                  *:*                     LISTEN     
tcp        0      0 *:34006                 *:*                     LISTEN     
......

2) netstat -tlp
查看当前tcp监听端口, 需要显示监听的程序名,当不清楚mysql的监听端口时比较好用
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 *:rrac                  *:*                     LISTEN      -                         
tcp        0      0 *:34006                 *:*                     LISTEN      23425/mysqld  
......


3) netstat -tl | grep 34006
    只查看mysql的监听端口,当前启动的mysql端口为34006,明确知道mysql监听端口时使用
4) netstat -ta | grep 34006
tcp        0      0 *:34006                 *:*                     LISTEN     
tcp        0      0 linux.local:34006       linux.local:41485       ESTABLISHED
tcp        0      0 linux.local:34006       linux.local:41486       ESTABLISHED
...
tcp        0      0 10.3.2.35:41488         10.3.2.35:34006         ESTABLISHED
tcp        0      0 10.3.2.35:41489         10.3.2.35:34006         ESTABLISHED
tcp        0      0 10.3.2.35:41490         10.3.2.35:34006         ESTABLISHED

由于数据库和运用程序都放在同一台机器了,因此这里连接被显示了两次. 可以使用-p参数来显示PID,然后grep PID.


5) netstat -tap | grep 34006 | grep 23425
    23425是当前mysql的PID
tcp        0      0 *:34006                 *:*                     LISTEN      23425/mysqld       
tcp        0      0 linux.local:34006       linux.local:41510       ESTABLISHED 23425/mysqld       
tcp        0      0 linux.local:34006       linux.local:41511       ESTABLISHED 23425/mysqld       
tcp        0      0 linux.local:34006       linux.local:41516       ESTABLISHED 23425/mysqld  

<think>嗯,用户想知道如何在Linux上用netstat查找Java程序使用端口。我记得之前看过一些步骤,可能需要结合psnetstat命令。首先,应该找到Java进程的PID,然后再根据PID查端口。 首先,用户可能需要使用ps命令来查找正在运行的Java进程。比如用ps -ef | grep java,这样可以列出所有Java进程,并显示它们的PID。比如输出里会有类似/usr/bin/java -jar app.jar这样的信息,然后第二列就是PID。 接下来,有了PID之后,可以用netstat命令来查看该进程占用的端口netstat的参数可能有-tulnp,其中-t是TCP,-u是UDP,-l是监听中的端口,-n是以数字形式显示端口,-p是显示进程信息。然后通过grep过滤出对应的PID,比如netstat -tulnp | grep 1234,这里的1234是之前找到的PID。 不过,用户可能不太清楚具体的命令组合,或者可能遇到权限问题,比如执行netstat时需要sudo权限才能看到所有进程的信息。这时候可能需要提示用户使用sudo或者以root身份运行。 另外,用户可能想一步到位,直接通过管道将ps找到的PID传给netstat,不过中间可能需要用xargs或者awk来处理。例如,ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs -I{} netstat -tulnp | grep {}。不过这样可能会有点复杂,分步骤可能更清晰。 还有,用户可能不知道如何解读netstat的输出。比如,Local Address列显示的是0.0.0.0:8080,表示监听所有接口的8080端口。Proto列显示是tcp还是udp,State列显示LISTEN等状态。 可能还需要提醒用户,如果Java进程没有监听端口(比如只是运行计算任务),那么netstat可能不会显示相关信息。此外,有些Java应用可能使用动态端口,或者通过配置文件指定端口,这时候检查应用配置也是必要的。 另外,除了netstat,还可以用ss命令,比如ss -ltnp | grep java,这可能更高效一些。不过用户指定了用netstat,所以应该以netstat为主。 总结一下步骤应该是:1. 用ps找到Java进程的PID;2. 用netstat根据PID查端口。同时要注意权限问题,可能需要sudo。此外,检查命令是否正确执行,比如grep是否匹配,PID是否存在等。</think>以下是分步骤说明如何用`netstat`查找Linux上Java程序使用端口: --- ### **步骤1:查找Java进程的PID** 使用`ps`命令筛选Java进程: ```bash ps -ef | grep java ``` 输出示例: ``` root 1234 5678 0 10:00 ? 00:00:05 /usr/bin/java -jar app.jar ``` **PID为第二列的值**(例如`1234`)[^4]。 --- ### **步骤2:通过PID查询端口** 使用`netstat`过滤该PID的端口信息: ```bash sudo netstat -tulnp | grep 1234 ``` 输出示例: ``` tcp6 0 0 :::8080 :::* LISTEN 1234/java ``` - **关键字段**:`8080`是端口号,`tcp6`表示协议类型,`LISTEN`表示监听状态[^1][^2]。 --- ### **步骤3(可选):直接关联Java进程** 组合命令一步查询: ```bash ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs -I{} sudo netstat -tulnp | grep {} ``` 通过管道将PID直接传递给`netstat`[^3]。 --- ### **注意事项** 1. 需要`sudo`权限查看系统级端口信息。 2. 若无输出,可能是Java进程未绑定端口(如纯计算任务)。 3. 动态端口需结合应用日志或配置文件确认。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值