Java不是我的主要编程语言,所以我的专业知识在这方面通常是有限的。
这个应用程序应该像服务或守护进程一样无限期地执行。其主要目的是在DB中处理某些行,因为它们是由其他进程插入的。
应用程序有时通过System.out.println吐出日志消息。它还使用一些其他日志文件。我之前使用的是log4j,但暂时禁用了。
此外,我在Windows Server环境中运行此操作,如果这有帮助的话。我现在不能使用linux。
问题是,在极少数情况下,我发现staging / prod env中的应用程序被锁定或者似乎没有进一步处理任何数据库行。在屏幕上按几次后,它会向前移动并像往常一样开始处理。这很奇怪,因为我不期待用户的任何输入。应用程序的任何输入都来自命令行或DB。
我也确信它不是数据库问题。该应用程序不等待任何表锁定。它可能与某些文件锁定或System.out流被锁定有关。后来我没想到可能性,直到我看到屏幕上的一些按键唤醒'申请。
所以我想知道是否有人可能会指出我可以进一步调试的方向。
答案 0 :(得分:1)
微软以其无限的智慧使得控制台窗口以这样的方式允许您使用鼠标选择矩形区域的字符。到目前为止一切都很好。
据说为了让用户更容易在文字滚动时选择文字,他们(以他们的无限智慧) 冻结 由终端窗口,如果它在您选择文本时尝试发出文本。 (*)
如果你用鼠标做点击一个控制台窗口那么少,他们(以他们无限的智慧)将窗口置于文本选择模式,就像存在所见证的那样一个小白色方块。
这是非常不幸的,因为点击窗口是我们也做的,只是简单地将窗口带到前台。但是这里有一个巨大的陷阱:如果控制台窗口不在前台,那么点击它就会把它带到前台。但如果控制台窗口已经在前台,则单击它进入选择模式。 (当然,大多数人很少知道,关心或想要被打扰,窗口是否已经在前景中。)
所以,总结一下:尽量不要点击你的窗口。如果必须,请仅单击标题。如果您不小心点击了窗口,请按[Enter]或再次单击以使小白色选择矩形消失。
因为只要有小的白色选择矩形,你的程序就会冻结。
(*)现在,他们可以轻松地冻结窗口的显示,同时选择不冻结过程;他们可以做到这一点,以便过程的输出保持缓冲,然后一旦选择完成就抛弃在屏幕上,但我猜他们太忙于他们的世界统治计划来解决这个问题。到目前为止,由于微软控制台窗口在选择模式下处于空闲状态而人们认为他们正在处理数据,我甚至无法开始思考到目前为止全世界浪费了多少时间(=金钱)。
答案 1 :(得分:1)