java - Java 服务可以关闭托管 Unix 机器吗?

标签 java unix out-of-memory redhat

我在 Redhat Unix 盒子上检查我的 Java 服务,但只发现盒子的 SSH 不起作用,SA 解释说机器内存不足并开始消耗交换空间,这最终导致机器挂起并关闭。

他暗示我的 java 服务导致服务器宕机,我很难相信这怎么可能 - 正如我认为在最坏的情况下,该服务将抛出 OutOfMemory 异常并且只会自行崩溃。

我的 java 内存设置是:“-Xms1g -Xmx5g”,从/proc/meminfo 中它显示该框有

MemTotal:     16304084 kB
MemFree:      12288796 kB

第二个问题是,我们可以查看/var/log 下的一些日志以找出真正的问题是什么吗?

最佳答案

您可以查看日志存档,看看内存不足 killer 是否在内存不足时杀死了您或其他进程(我的日志恰好在/var/log/all.log 中,您的可能在某个地方否则和/或你应该查看发生这件事的那一天的日志——编辑,在 RedHat 上,这应该在 /var/log/messages 中,但我不知道它们是怎么回事默认旋转):

# grep -i -e "Killed process" -e "out of memory" /var/log/all.log
1406786406 1406786406 0 3 127.0.0.1 2014-07-31T01:00:06-05:00 ahostname kern err kernel[76729.082621]: [76729.082621] 
    Out of memory: Kill process 22407 (java) score 187 or sacrifice child
1406786406 1406786406 0 3 127.0.0.1 2014-07-31T01:00:06-05:00 ahostname kern err kernel[76729.082625]: [76729.082625]
    Killed process 22407 (java) total-vm:859680kB, anon-rss:304232kB, file-rss:608kB
1406811608 1406811608 0 3 127.0.0.1 2014-07-31T08:00:08-05:00 ahostname kern err kernel[101910.841683]: [101910.841683] 
    Out of memory: Kill process 1370 (java) score 198 or sacrifice child
1406811608 1406811608 0 3 127.0.0.1 2014-07-31T08:00:08-05:00 ahostname kern err kernel[101910.841686]: [101910.841686] 
    Killed process 1370 (java) total-vm:859928kB, anon-rss:332688kB, file-rss:560kB

要更好地了解 Linux 系统内存不足时会发生什么,请参阅 documentation .或者只搜索“out of memory killer”。

发生的事情是,当操作系统检测到内存不足时,它会开始终止进程​​。有时这可能最终成为 sshd 进程或其他用于登录系统的关键进程。

您的 Java 进程本身可能不会导致中断,但它可能与同一服务器上运行的其他进程结合导致了该问题。但是查看 OOM Killer 的日志是一个很好的起点。

还可以使用 top 查看正在运行的其他进程正在使用系统上的剩余内存。要按内存使用情况排序(最高内存优先),请在运行 top 后键入 M

关于java - Java 服务可以关闭托管 Unix 机器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864667/

相关文章:

unix - openat 如何避免 TOCTTOU 错误?

sql-server - 将 600MB 文件作为文件流数据插入 SQL Server Express 时出现内存不足错误

java - Spring Validation 中的单元测试自定义 validator

Java 8 : Functional interface to check permissions and return a response

java - 如何在 Debug模式下编译? (netbeans, java, maven)

java - Apache ActiveMQ 中的内存泄漏

android - 在创建位图时抛出 OutOfMemoryError

java - 在静态初始化器之后声明静态变量

bash - 如何从 Unix shell 脚本中的字符串中删除空格

CTRL-C 不会杀死程序 linux/C