背景:云南高新集群AmbariServer每天会异常挂掉
    1、使用strace监控进程是自己退出的还是其它进程影响退出的
    nohup strace -T -tt -e trace=all -p 21715 > ambari-server-trace.log &
    云南AmbariServer异常退出分析 - 图1
    发现进程是被kill的


    2、使用auditctl继续监控进程情况
    auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k test1
    ausearch -k test1 | grep 47da (16进制的进程号)
    发现操作只有15411进程和ambari server进行有交付
    云南AmbariServer异常退出分析 - 图2
    云南AmbariServer异常退出分析 - 图3
    这个点ambari-server退出,操作进程为15411,为abrtd进程

    ambari-agent.log 显示2-29号 03:40链接不上8440 8441端口

    云南AmbariServer异常退出分析 - 图4
    从trace日志看,也是2-29号 03:40被杀掉
    云南AmbariServer异常退出分析 - 图5
    解决:由于只有15411进程和ambari server进行有交付,所以停掉abrtd服务后观察。
    service abrtd stop
    观察几天后,AmbariServer正常运行。

    trace命令:
    nohup strace -T -tt -e trace=all -p 21715 > trace.log &监控该pid的情况,如果是被kill -9,会出现一个log,大致如下:
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/webapp/xxx-server/
    -XX:ErrorFile
    -XX:ErrorFile=/var/log/ambari-server/ambari-serve_err.log
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/hive/hms_heapdump.hprof


    nohup strace -T -tt -e trace=all -p 21715 > trace.log &
    -tt 在每行输出的前面,显示毫秒级别的时间
    -T 显示每次系统调用所花费的时间
    -v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
    -f 跟踪目标进程,以及目标进程创建的所有子进程
    -e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
    -o 把strace的输出单独写到指定的文件
    -s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
    -p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。

    -e trace=file 跟踪和文件访问相关的调用(参数中有文件名)
    -e trace=process 和进程管理相关的调用,比如fork/exec/exit_group
    -e trace=network 和网络通信相关的调用,比如socket/sendto/connect
    -e trace=signal 信号发送和处理相关,比如kill/sigaction
    -e trace=desc 和文件描述符相关,比如write/read/select/epoll等
    -e trace=ipc 进程见同学相关,比如shmget等