Rob*_*eck 5 java port mac-osx kill netstat
我们有一个在 Mac OS X 上运行的 Java 服务器应用程序。
有时这个应用程序变得没有响应,我们不得不使用kill -9. 然而,这个过程并没有消失;它似乎仍然是ps,其名称周围带有括号,并且 STAT 列中有一个问号:
$ ps u -p 776
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
camadmin 776 0.0 0.0 0 0 ?? ?E 5:12PM 0:00.00 (java)
Run Code Online (Sandbox Code Playgroud)
更重要的是,服务器正在使用的端口仍然是绑定的:
$ netstat -na | grep 9902
tcp4 0 0 *.9902 *.* LISTEN
Run Code Online (Sandbox Code Playgroud)
即使它不可见lsof:
$ sudo lsof -P -i tcp | grep 9902
$
Run Code Online (Sandbox Code Playgroud)
由于端口仍然绑定,我们无法重新启动服务器应用程序。没有重新启动机器,可以做些什么来释放端口并真正杀死这个进程?
状态E似乎意味着进程正在退出。但你的进程基本上是一个永远不会退出的僵尸。我在网上发现的所有内容都表明,除了重新启动之外,您几乎无能为力,例如How to Kill an "exiting" process on OS X (state = E)。如果由于其他服务受到影响而不想重新启动 OSX 服务器,您可以考虑(作为解决方法):
仅将此 java 服务迁移到单独的 OSX 计算机,您可以在需要时重新启动,影响最小
如果该服务器上有足够的 RAM,您可以创建一个虚拟机并从虚拟机内部运行该服务。如果进程变得无响应并且不会被终止,您可以只是弹回虚拟机而不会影响主机操作系统。由于它看起来像 Java,因此您不必将来宾 VM 创建为 OSX。也许可以在 Ubuntu 或 CentOS VM 中尝试一下?您可以将其中任何一个下载为设备(OVA/VDI 文件),并在 30 分钟内将其安装并在 VirtualBox 中运行。Linux 虚拟机上甚至可能没有僵尸问题。请参阅http://virtualboximages.com/Free.VirtualBox.VDI.Downloads
| 归档时间: |
|
| 查看次数: |
3153 次 |
| 最近记录: |