一旦我的守护进程开始接收请求,它几乎立即就会被杀死。 应用程序日志绝对没有错误输出,即使我试图在前台运行它。
我有一个疑问,操作系统可能会杀死它的OOM,因为这个虚拟机实例只有512 MB的分配。
我想知道是什么原因造成的,但是因为有很less的可用日志文件而受到阻碍:
# 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
正如你所看到的,系统日志已经两个月大了,最近没有添加新的条目。 这就是我能find的所有日志文件。
我在SmartOS上运行:
SunOS hostname 5.11 joyent_20120504T040233Z i86pc i386 i86pc
我有这个实例的根(在SmartOS的说法中称为“区域”,afaik),但是不能控制整个系统。
我读过如何知道Linux服务器是否杀死了我的进程,以及哪个进程被杀死了? ,但对我来说没有帮助。
Solaris / SmartOS不实现OOM杀手。 所以不是这样。 如果应用程序试图请求不可用的内存,则会将错误返回给应用程序,并允许其继续运行。 当然,应用程序如何pipe理错误是一个不同的问题。
您可以使用truss / dtrace来检查应用程序正在进行的系统调用,并查找返回的任何错误。
您也可以使用prstat,ps等来关注进程,看看它正在请求/使用多less内存。