相关疑难解决方法(0)

找出当前Java VM中打开的网络套接字

我正在编写一个端到端测试,我的Java程序发布了它的所有资源 - 线程,服务器套接字,客户端套接字.它是一个库,因此通过退出JVM释放资源不是一种选择.测试线程的释放很容易,因为您可以向ThreadGroup询问其中的所有线程,但我还没有找到一种获取当前JVM正在使用的所有网络套接字列表的好方法.

有没有办法从JVM获取所有客户端和服务器套接字的列表,类似于netstat?我在Java 7上使用NettyOIO(即java.net.ServerSocketjava.net.Socket).该解决方案需要在Windows和Linux上运行.

我的第一个偏好是使用纯Java从JVM中询问它.我试图寻找一个MX Bean或类似的,但没有找到任何.

另一个选择可能是连接到JVM的分析/调试API并询问Socket和ServerSocket的所有实例,但我不知道如何做到这一点以及是否可以在没有本机代码的情况下完成(AFAIK,JVMTI仅限本机) ).此外,它不应该使测试变慢(即使我最慢的端到端测试只有0.5秒,其中包括启动另一个JVM进程).

如果询问JVM不起作用,第三种选择是创建一个设计,在设置时跟踪所有套接字.这样做的缺点是可能会遗漏一些创建套接字的地方.由于我使用Netty,它似乎可以通过包装ChannelFactory和使用ChannelGroup来实现.

java sockets monitoring netty

22
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×1

monitoring ×1

netty ×1

sockets ×1