![升级后,基于 Java 的服务器在 Fedora Core 31 / 32 上停止并提示输入密码](https://linux22.com/image/756053/%E5%8D%87%E7%BA%A7%E5%90%8E%EF%BC%8C%E5%9F%BA%E4%BA%8E%20Java%20%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%9C%A8%20Fedora%20Core%2031%20%2F%2032%20%E4%B8%8A%E5%81%9C%E6%AD%A2%E5%B9%B6%E6%8F%90%E7%A4%BA%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81.png)
我升级了一个老(大约5或7岁)Fedora Server 升级至 32现在有一个进程被停止的问题 - 被操作系统停止。唯一新的“应用程序代码”是 Java 版本 ( open-jdk
),这对 Java 代码来说无关紧要。而且,如果是从命令行启动的(也许不是这样?如果是这样,我还不知道怎么做),挂起是“可重新启动的”,因为它进入“已停止”状态(报告为ps
)Tl
,可以通过前台操作来取消(下面有更多介绍)。
所以,操作系统本身发生了一些变化。
有多种方法可以启动被停止的代码,但为了方便起见,我一直通过命令行启动它,通过 将其置于后台&
。不管它是如何启动的,它都会运行一个基于 Java 的守护进程,该守护进程会寻找要执行的工作,当它找到工作时,它会启动一个子进程(也是 Java),该子进程会自行异步执行一些处理。
如果没有儿童发射,就不会停止。
如果有子进程启动,子进程会运行一段时间,然后整个进程树(从命令行启动的守护进程开始向下)都会处于“停止”状态。并且,我可能无法轻易地给它足够的负载来启动多个子进程,否则其中一个子进程会停止调度守护进程,因为系统速度太快,几乎可以立即到达停止点。
子进程的功能分为“前奏”、“主进程”、“尾声”和“清理”。并且,它会报告正在执行的操作,以便我们知道它在哪里。... 它在停止时总是进入主进程,因此我确信它在停止之前会运行各种设置 - 它不仅仅是在启动子 Java 时停止。两个进程都处于该Tl
状态。
在命令行中,jobs
该作业显示为“已停止”。然后您可以fg
返回守护进程本身并然后它会提示输入密码(我以前从来没见过这种行为?!)一旦停用,所有停止的线程/进程都会恢复,并且运行至完成,就像什么都没发生过一样。我通常会^z
然后bg
返回到之前的后台状态......
为了好玩,我尝试不进行背景操作,当它到达问题点时,我只会收到输入密码的提示!...我以前从未在任何系统上见过类似的行为。这一定是一个有力的线索。
到目前为止,对该州的调查Tl
毫无成果,尽管对该T
州有合理的记录,但除了这个fg
诡计之外,我还不知道如何重新启动这样一项已停止的工作。(无需输入密码即可重新启动这种已停止的进程树的方法将是一个很好的临时解决方法!)我还没有时间了解是什么让某些东西进入这种T
状态。但这是我的下一个重点,在我完成下面分享的内容之后。
这是完全不可接受的行为,我需要尽快修复它。
我想这也许是OOM
杀手修改后的行为,但它并没有杀死作业?!但也许吧,所以我观察了内存,发现没有太多实际可用内存,但总是有大量虚拟内存(交换空间)可用。
唯一可能起作用的另一个怪癖是,当我将服务器升级到 Fedora Server 32 时,如果我没有在控制台上监控启动,它会启动到 31- 非常令人沮丧,我已经尝试修复此问题,但徒劳无功。这似乎是grub
系统“升级”后的一个旧错误。然而,目前运行为 31- 这是一台服务器,亲自在控制台上重新启动很麻烦! - 这可能是原因吗?!我猜这不是原因,但我不知道。
我关闭了 selinux,只是为了确保这不是原因,事实证明不是(假设 NSA 的东西实际上可以关闭)。
我迫切希望尽快找到解决方案,我做了我能做的所有研究,并且通过网络搜索建议Fedora 30 问题已解决关于EnableMultipleStreamsException
。但这似乎不是问题。...仍在研究!
解决方法尝试
我尝试使用kill -CONF <pid>
,但它只释放了守护进程,对子进程不起作用,即使我直接对它们应用了相同的命令。我胡乱猜测,他们正在寻找从某处应用的密码。值得注意的是,状态从 Tl 变为 Sl!这是什么意思?我不知道。
操作系统中的某些东西停止了该进程树!
我必须关闭某些东西或者转到另一个操作系统,不管这有多么痛苦。
以前有谁见过这种情况吗?现在该怎么办?等等?