目录
在Linux服务器上查看正在运行的Java程序,你可以使用几种不同的方法。这些方法包括使用ps
命令、jps
命令(如果已安装Java Development Kit (JDK))、以及pgrep
和top
或htop
等工具。下面是一些常用的方法:
1. 使用ps
命令
ps
命令是最常用的工具之一,用于显示当前进程的快照。要查找所有Java进程,你可以使用grep
命令来过滤结果:
ps -ef | grep java
这个命令会列出所有包含"java"的行,这通常意味着它们是Java进程。-ef
选项用于显示完整的格式信息。
2. 使用jps
命令
jps
(Java Virtual Machine Process Status Tool)是JDK提供的一个工具,用于列出当前所有Java虚拟机实例的ID以及主类(main class)的名称(如果有的话)。要使用jps
,你需要确保已经安装了JDK,并且jps
命令在你的PATH中。
jps -l
-l
选项会输出主类的全名,如果不加-l
,则只显示JVM的ID和主类的简短名称(或主类的jar包名称)。
3. 使用pgrep
和pkill
pgrep
命令用于查找匹配条件的进程ID。要查找所有Java进程,可以使用:
pgrep java
这会列出所有名为"java"的进程的PID。如果你想要基于这些PID做进一步的操作(比如杀死这些进程),可以结合使用pkill
(pgrep
的"kill"版本)或kill
命令。
4. 使用top
或htop
top
命令提供了一个实时的视图,显示了系统上正在运行的进程及其资源使用情况(如CPU和内存)。虽然它默认不会直接过滤出Java进程,但你可以通过按下f
键来定制显示的字段,并通过添加COMMAND
字段(如果尚未选中)来更容易地识别Java进程。
htop
是top
的一个增强版本,提供了一个更友好的用户界面和更多的功能,包括通过按F3
或/
来搜索特定命令(如"java")的进程。
5.根据端口占用情况找到pid
lsof
lsof(list open files)是一个在Linux环境下用于列出当前系统打开文件的工具。由于Unix/Linux系统认为“一切皆文件”,因此通过lsof可以查看用户和进程操作了哪些文件,也可以查看系统中网络的使用情况,以及设备的信息。
lsof命令的输出包含了多列信息,每列都有特定的含义:
- COMMAND:进程的名称。
- PID:进程标识符。
- USER:进程所有者。
- FD:文件描述符,应用程序通过文件描述符识别该文件。
- TYPE:文件类型。
- DEVICE:指定磁盘的名称。
- SIZE:文件的大小。
- NODE:索引节点(文件在磁盘上的标识)。
- NAME:打开文件的确切名称。
列出某个进程打开的所有文件:
lsof -p 1234
这会列出进程号为1234的进程所打开的所有文件。
列出某个用户打开的文件:
lsof -u root
这会列出root用户打开的所有文件。
查看某个端口的使用情况:
lsof -i :80
这会列出所有打开80端口的进程。
查看连接到某个IP地址和端口的进程:
lsof -i @192.168.1.1:22
这会列出所有连接到IP地址192.168.1.1的22端口的进程。
列出所有打开的网络连接:
lsof -i
这会列出所有打开的网络连接,包括TCP和UDP连接。
- 由于lsof需要访问核心内存和各种文件,因此通常需要以root用户身份运行。
- 在使用lsof命令时,可以组合多个参数来满足复杂的查询需求。
- 默认情况下,lsof的输出可能会包含很多信息,可以通过grep等工具进行过滤,以获取更具体的结果。
netstat
netstat(网络统计)是一个在Linux系统中广泛使用的命令行工具,用于显示网络连接、路由表、接口统计、多播成员等信息。它对于网络故障排除、性能监测以及安全审计等方面都非常有用。
显示所有连接和监听端口
netstat -a
这会显示所有当前活动的TCP、UDP连接和所有正在监听的端口。
显示TCP连接
netstat -t
仅显示当前活动的TCP连接及其状态。
显示UDP连接
netstat -u
仅显示当前活动的UDP连接。
以数字形式显示所有连接和监听端口
netstat -an
这可以加快输出速度,特别是在有大量连接时。
显示与特定端口关联的进程信息
netstat -anp | grep 端口号
注意:在某些系统中,可能需要root权限才能显示进程信息。
显示路由表
netstat -r
显示系统的路由表,了解数据包如何在网络中进行路由。
显示网络接口信息
netstat -i
显示网络接口的统计信息,包括接收和发送的数据包数、错误数等。
连续显示网络状态信息
netstat -c 5
每5秒更新一次网络状态信息,直到用户中断。
netstat是一个非常强大的网络分析工具,通过不同的选项和参数组合,可以灵活地显示各种网络连接和统计信息。它对于网络管理员和开发人员来说是一个不可或缺的工具,能够帮助他们更好地管理和维护Linux系统中的网络环境。
需要注意的是,随着Linux系统的不断发展和更新,一些新的工具(如ss命令)逐渐出现并提供了类似或更强大的功能。然而,netstat命令仍然因其简单性和易用性而受到许多用户的喜爱。
ss
ss命令是Socket Statistics的缩写,也被称为IPC(Inter-Process Communication)套接字统计。它是Linux下一个强大的网络管理命令,主要用于获取系统中socket的统计信息。ss命令的功能与netstat类似,但相比netstat,ss命令能显示更多更详细的TCP和连接状态的信息,并且在处理大量socket连接时更快更高效。这是因为ss命令直接利用了TCP协议栈中的tcp_diag模块,这个模块可以获得Linux内核中的第一手信息,因此其性能优于其他工具。
ss命令的基本语法为:
ss [选项] [过滤器]
其中,选项和过滤器可以根据需要进行设置,以满足不同的查看需求。
显示所有TCP套接字信息:
ss -t -a
此命令会列出所有TCP套接字的信息,包括监听和非监听状态的套接字。
显示所有UDP套接字信息:
ss -u -a
此命令会列出所有UDP套接字的信息。
显示所有监听状态的套接字及其对应的进程信息:
ss -l -p
此命令会列出所有处于监听状态的套接字,并显示与之关联的进程信息。
以数字格式显示所有套接字信息及其统计摘要:
ss -n -s
此命令会以数字格式显示所有套接字的信息及其统计摘要。
ss命令的过滤功能
ss命令还支持使用过滤器来提供更精确的查询结果。例如,可以通过IP地址、端口号、状态等来筛选所需的信息。例如:
查看所有已建立的TCP连接:
ss state ESTABLISHED
查看特定IP地址和端口的连接:
ss dst 192.168.1.1:80
ss命令的优势
- 更详细的信息:ss命令能显示更多更详细的TCP和连接状态的信息。
- 更快的性能:在处理大量socket连接时,ss命令比netstat更快更高效。
- 直接利用内核信息:ss命令直接利用了内核的TCP连接跟踪状态信息,避免了像netstat那样通过/proc接口获取数据的开销。
综上所述,ss命令是Linux下一个非常强大且实用的网络管理命令,它能够帮助系统管理员更好地监控和管理系统的网络连接状态。
案例:发现占用7300端口的程序,并关掉
1. 发现占用7300端口的程序PID
sudo lsof -i :7300
sudo ss -ltnp | grep :7300
2. 停掉占用7300端口的程序
一旦你找到了占用7300端口的进程PID,你可以使用kill
命令来停掉它。如果你已经知道PID,则运行:
sudo kill 84292
如果进程没有响应,你可能需要使用kill -9
来强制终止它:
sudo kill -9 84292
请注意,使用kill -9
是强制终止进程,可能会导致数据丢失或其他副作用,因此应该谨慎使用。
总结
- 使用
lsof -i :8080
或ss -ltnp | grep :8080
来查找占用8080端口的进程PID。 - 使用
kill PID
或kill -9 PID
来停掉该进程。