我有一个 Java 进程,它在 Solaris 机器上运行了几天后就快死了。应用程序的日志没有任何关于进程终止原因的信息。查看启动 Java 进程的脚本,我看到 stdout 和 stderr 被重定向到/dev/null。对于 Java 进程来说,这通常是个好主意吗(例如,Java 内存不足错误记录在哪里)?
如何/从哪里开始调试我当前的问题(进程终止)?我应该尝试将标准输出和标准错误重定向到普通文件吗?
nohup $JAVA_HOME/bin/java \
-Xms256m \
-Xmx1024m \
-jar $CRON_HOME/cron.jar > /dev/null 2>&1 &
最佳答案
一定要将此信息发送到日志文件。将 stdout/stderr 重定向到 /dev/null
意味着您正在丢弃有值(value)的信息。将输出发送到一个或两个文件。将 stderr 重定向到 stdout 可能更容易,这样您就可以交错结果。至于你在哪里记录这些信息,最好问问你的系统管理员,因为他们可能对这类信息应该去哪里有意见(而且你还不知道你有多少信息出来了)。
在 JVM 自身 崩溃时(与 JVM 中的应用程序相反),这是一个有值(value)的特定场景。崩溃报告会转储到 stdout,如果您正在捕获 stdout,那么它很有值(value),即使只是为了告诉您 JVM 消失的原因。
关于java - 将 Java 后台进程输出重定向到/dev/null - 这是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659181/