在 SmartOS 上如何判断进程是否因 OOM 而被终止

在 SmartOS 上如何判断进程是否因 OOM 而被终止

我的一个守护进程一旦开始接收请求,就会立即被终止。即使我尝试在前台运行它,应用程序日志也没有任何错误输出。

我怀疑操作系统可能会因为 OOM 而杀死它,因为这个 VM 实例只分配了 512 MB。

我想找出导致这种情况的原因,但由于可用的日志文件很少,我感到很困惑:

# ls -la /var/log
total 20011
drwxr-xr-x   3 root     sys           10 Oct  9 02:38 .
drwxr-xr-x  31 root     root          31 May 15  2013 ..
-rw-r-----   1 root     root     4914932 Nov 15 16:34 auth.log
-rw-r--r--   1 root     root           0 Sep  9 15:49 courier.log
drwxr-xr-x   3 root     root           5 Nov  8 22:18 httpd
-rw-r--r--   1 root     root     2515768 Sep 10 03:10 postfix.log
-rw-r-----   1 root     other          0 Feb 21  2008 sysidconfig.log
-rw-r-----   1 root     sys      2514934 Sep 10 03:10 syslog
-rw-------   1 root     root         132 Nov  8 18:45 vsftpd.log
-rw-r--r--   1 root     root           0 Jun  5  2012 zoneinit.log

如您所见,syslog 已有两个月历史,最近没有添加新条目。这就是我能找到的所有日志文件。

我在 SmartOS 上运行:

SunOS hostname 5.11 joyent_20120504T040233Z i86pc i386 i86pc

我有此实例的根权限(据我所知,在 SmartOS 术语中称为“区域”),但无法控制整个系统。

我读了我如何知道 Linux 服务器是否杀死了我的进程以及它杀死了哪个进程?,但对我的情况没有帮助。

答案1

Solaris/SmartOS 没有实现 OOM Killer。所以不是那样。如果应用程序试图请求不可用的内存,则会向应用程序返回错误,并允许其继续运行。当然,应用程序如何管理错误是另一个问题。

您可以使用 truss/dtrace 检查应用程序正在进行的系统调用并查找返回的任何错误。

您还可以使用 prstat、ps 等监视该进程,以查看它请求/使用了多少内存。

相关内容