linux服务器如何看运行的java程序有哪些(ps、jps、top、lsof、netstat、ss命令等)

avatar
作者
猴君
阅读量:0

目录

1. 使用ps命令

2. 使用jps命令

3. 使用pgrep和pkill

4. 使用top或htop

5.根据端口占用情况找到pid

lsof

netstat

ss

ss命令的过滤功能

ss命令的优势

案例:发现占用7300端口的程序,并关掉

1. 发现占用7300端口的程序PID

​编辑

2. 停掉占用7300端口的程序

总结


在Linux服务器上查看正在运行的Java程序,你可以使用几种不同的方法。这些方法包括使用ps命令、jps命令(如果已安装Java Development Kit (JDK))、以及pgreptophtop等工具。下面是一些常用的方法:

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. 使用pgreppkill

pgrep命令用于查找匹配条件的进程ID。要查找所有Java进程,可以使用:

pgrep java

 

这会列出所有名为"java"的进程的PID。如果你想要基于这些PID做进一步的操作(比如杀死这些进程),可以结合使用pkillpgrep的"kill"版本)或kill命令。


4. 使用tophtop

top命令提供了一个实时的视图,显示了系统上正在运行的进程及其资源使用情况(如CPU和内存)。虽然它默认不会直接过滤出Java进程,但你可以通过按下f键来定制显示的字段,并通过添加COMMAND字段(如果尚未选中)来更容易地识别Java进程。

htoptop的一个增强版本,提供了一个更友好的用户界面和更多的功能,包括通过按F3/来搜索特定命令(如"java")的进程。

更多top命令使用


5.根据端口占用情况找到pid

lsof

lsof(list open files)是一个在Linux环境下用于列出当前系统打开文件的工具。由于Unix/Linux系统认为“一切皆文件”,因此通过lsof可以查看用户和进程操作了哪些文件,也可以查看系统中网络的使用情况,以及设备的信息。

lsof命令的输出包含了多列信息,每列都有特定的含义:

  • COMMAND:进程的名称。
  • PID:进程标识符。
  • USER:进程所有者。
  • FD:文件描述符,应用程序通过文件描述符识别该文件。
  • TYPE:文件类型。
  • DEVICE:指定磁盘的名称。
  • SIZE:文件的大小。
  • NODE:索引节点(文件在磁盘上的标识)。
  • NAME:打开文件的确切名称。
  1. 列出某个进程打开的所有文件

    lsof -p 1234
     

    这会列出进程号为1234的进程所打开的所有文件。

  2. 列出某个用户打开的文件

    lsof -u root
     

    这会列出root用户打开的所有文件。

  3. 查看某个端口的使用情况

    lsof -i :80
     

    这会列出所有打开80端口的进程。

  4. 查看连接到某个IP地址和端口的进程

    lsof -i @192.168.1.1:22

    这会列出所有连接到IP地址192.168.1.1的22端口的进程。

  5. 列出所有打开的网络连接

    lsof -i

    这会列出所有打开的网络连接,包括TCP和UDP连接。

  • 由于lsof需要访问核心内存和各种文件,因此通常需要以root用户身份运行。
  • 在使用lsof命令时,可以组合多个参数来满足复杂的查询需求。
  • 默认情况下,lsof的输出可能会包含很多信息,可以通过grep等工具进行过滤,以获取更具体的结果。

netstat

netstat(网络统计)是一个在Linux系统中广泛使用的命令行工具,用于显示网络连接、路由表、接口统计、多播成员等信息。它对于网络故障排除、性能监测以及安全审计等方面都非常有用。

  1. 显示所有连接和监听端口

    netstat -a

    这会显示所有当前活动的TCP、UDP连接和所有正在监听的端口。

  2. 显示TCP连接

    netstat -t
     

    仅显示当前活动的TCP连接及其状态。

  3. 显示UDP连接

    netstat -u

    仅显示当前活动的UDP连接。

  4. 以数字形式显示所有连接和监听端口

    netstat -an

    这可以加快输出速度,特别是在有大量连接时。

  5. 显示与特定端口关联的进程信息

    netstat -anp | grep 端口号

    注意:在某些系统中,可能需要root权限才能显示进程信息。

  6. 显示路由表

    netstat -r
     

    显示系统的路由表,了解数据包如何在网络中进行路由。

  7. 显示网络接口信息

    netstat -i

    显示网络接口的统计信息,包括接收和发送的数据包数、错误数等。

  8. 连续显示网络状态信息

    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 [选项] [过滤器]

其中,选项和过滤器可以根据需要进行设置,以满足不同的查看需求。

  1. 显示所有TCP套接字信息

    ss -t -a

    此命令会列出所有TCP套接字的信息,包括监听和非监听状态的套接字。

  2. 显示所有UDP套接字信息

    ss -u -a

    此命令会列出所有UDP套接字的信息。

  3. 显示所有监听状态的套接字及其对应的进程信息

    ss -l -p

    此命令会列出所有处于监听状态的套接字,并显示与之关联的进程信息。

  4. 以数字格式显示所有套接字信息及其统计摘要

    ss -n -s

    此命令会以数字格式显示所有套接字的信息及其统计摘要。

ss命令的过滤功能

ss命令还支持使用过滤器来提供更精确的查询结果。例如,可以通过IP地址、端口号、状态等来筛选所需的信息。例如:

  • 查看所有已建立的TCP连接

    ss state ESTABLISHED

  • 查看特定IP地址和端口的连接

    ss dst 192.168.1.1:80

ss命令的优势
  1. 更详细的信息:ss命令能显示更多更详细的TCP和连接状态的信息。
  2. 更快的性能:在处理大量socket连接时,ss命令比netstat更快更高效。
  3. 直接利用内核信息: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 :8080ss -ltnp | grep :8080来查找占用8080端口的进程PID。
  • 使用kill PIDkill -9 PID来停掉该进程。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!