linux查看java进程|线程池信息

本文介绍如何通过端口号查找对应的Java进程及其线程信息,并利用top命令检查内存占用情况。此外,还展示了如何使用jstack工具深入分析Java线程的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.根据端口号57638查看对应进程pid/name=1463/java     

   netstat -apn | grep  57638  

tcp        0      0 ::ffff:172.20.5.10:57638    :::*                        LISTEN      1463/java           
tcp        0      0 ::ffff:172.20.5.10:57638    ::ffff:172.20.5.14:59204    ESTABLISHED 1463/java


2. top 查看占用内存最多的几个进程

ps aux | grep applicationName  查看对应applicationName的pid, 第二列表示pid 1463

root      1463 12.5  2.3 5531468 3057636 ?     Sl   Oct12 315:22


3. top  -p pid -H 查看进程pid对应的线程信息,这里每个线程映射对应到linux的一个进程PID

top  -p 1463 -H

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                      
 1463 root      20   0 5401m 2.9g  39m S  0.0  2.3   0:00.00 java                                                                                          
 1464 root      20   0 5401m 2.9g  39m S  0.0  2.3   0:01.69 java


4.  使用jstack查看对应线程的具体信息

jstack pid | grep -A 10 hex(id)

pid进程id,  -A 表示 取出对应行后,往后继续显示10行内容, 

hex(id) 表示线程PID对应的十六进制数字,全部用小写字母表示,

可以借助计算器 或其他工具进行转换, 用python 转换: python -c "print (hex(1464))"

jstack 1463 | grep -A 10 `python -c "print (hex(1464))"`

"main" #1 prio=5 os_prio=0 tid=0x00007f15ac01e800 nid=0x5b8 waiting on condition [0x00007f15b0a37000]
   java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x0000000700016ba0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ThreadPoolExecutor.awaitTermination(ThreadPoolExecutor.java:1465)
at org.apache.spark.rpc.netty.Dispatcher.awaitTermination(Dispatcher.scala:180)
at org.apache.spark.rpc.netty.NettyRpcEnv.awaitTermination(NettyRpcEnv.scala:273)
at org.apache.spark.executor.CoarseGrainedExecutorBackend$$anonfun$run$1.apply$mcV$sp(CoarseGrainedExecutorBackend.scala:231)
at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:67)



ref: http://blog.youkuaiyun.com/jiafu1115/article/details/7355628

http://flysnowxf.iteye.com/blog/1162691

https://www.zhihu.com/question/20238208

http://blog.youkuaiyun.com/hanghangaidoudou/article/details/51488249


                                                                                         






### 查看线程池状态的方法 对于Java应用,在Linux环境中可以通过`jstack`工具来获取线程转储信息,进而分析线程的状态。通过命令行输入`jps -v`可以得到当前运行中的Java进程ID(PID),之后利用获得的PID作为参数执行`jstack -f <pid>`能够打印出指定Java程序的所有线程详情及其堆栈跟踪情况[^2]。 然而,针对更通用意义上的线程池(而非仅限于JVM内部实现),由于不同的编程语言和框架有着各自特定的方式来管理和监控其创建的线程池资源,因此具体操作会有所不同: - 对于C/C++编写的应用程序,特别是那些基于POSIX标准构建的服务端软件,可能需要依赖日志记录或者专门开发调试接口来暴露线程池的工作状况。 - 如果是采用某些高级别的并发库或中间件产品,则应查阅相应文档了解内置的支持特性;例如Boost C++ Libraries提供了丰富的诊断功能用于观察asio服务对象下的工作线程行为模式。 当涉及到操作系统层面的整体视角时,虽然无法直接看到某个独立进程中由程序员自定义管理的线程集合的具体表现形式,但是仍然有办法间接评估整个系统的多任务处理效率以及单个进程中活跃线程的数量变化趋势: ```bash # 显示所有线程的信息 top -H -b -n 1 | less # 或者使用 ps 命令配合 grep 过滤目标进程名并统计线程数 ps -eLf | grep [process_name] | wc -l ``` 上述方法可以帮助理解系统范围内各个进程所占用CPU时间片的情况,并且识别是否存在过多竞争导致性能瓶颈等问题的发生。不过需要注意的是这些手段更多是从宏观角度出发提供线索指导进一步深入探究潜在问题所在之处,而并非精确反映某一线程池机制本身的运作细节[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值