一种 Linux JAVA进程突然消失的原因

 

有时候会遇到JAVA程序在服务器上运行一段时间后进程突然没有了,查看JAVA应用的日志并没有任何的异常。

这时候应该优先想到进程是不是被操作系统Kill掉了,查看操作系统日志:

1

2

3

cd /var/log/

# 查看 messages 文件

cat messages* | grep java

如果看到类似如下信息说明由于操作系统内存剩余太低,JAVA进程被操作系统干掉了:

01

02

03

04

05

06

07

08

09

10

Apr 15 20:57:50 iZuwucrzorhw2yZ kernel: java invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: java cpuset=/ mems_allowed=0

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: CPU: 0 PID: 2793 Comm: java Not tainted 3.10.0-693.2.2.el7.x86_64 #1

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 1356]     0  1356   629574    17847      94        0             0 java

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 3804]     0  3804   886644    19509     113        0             0 java

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 2676]     0  2676   894623    85673     278        0             0 java

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 2754]     0  2754   965673    40515     362        0             0 java

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [14208]     0 14208  3051253   108737    4500        0             0 java

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: Out of memory: Kill process 14208 (java) score 113 or sacrifice child

Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: Killed process 14208 (java) total-vm:12205012kB, anon-rss:434948kB, file-rss:0kB, shmem-rss:0kB

这种问题通常发生下内存较低的服务器下,操作系统为了保护内存能够支持自己运行,将JAVA进程杀掉。

找到了运营自然好解决,通过分为2种情况:

  1. JAVA程序有内存泄露问题, 这种情况那就通过JAVA内存分析工具 定位内存泄露的位置,然后修复。
  2. 服务器内存太低, 这种情况还是升级服务器吧。

xiyoufang2020年4月18日未分类No Comments

通用的程序启动/停止Shell脚本

告别Shell命令恐惧症,你需要的是这个『启动、停止Shell』脚本,下面是个php-fpm的启停脚本

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

#!/bin/bash

 

SHELL_DIR=$(cd "$(dirname "$0")";pwd)

opt="${@:2}"

echo "shell dir: $SHELL_DIR, arguments:$opt"

 

psid=

 

checkpid() {

   psid=`ps -ef | grep 'php-fpm' | grep -v 'grep' | grep -v 'sh' | awk '{print $2}' | tr '\n' ' '`

   echo "psid: $psid"

}

 

start() {

     echo "starting..."

     checkpid

      if [ ${#psid} -ne 0 ]; then

         echo "================================"

         echo "warn: php-fpm already started! (pid=$psid)"

         echo "================================"

      else

         echo "============ Start ============="

         echo "starting php-fpm ..."

         php-fpm $opt

         checkpid

         if [ ${#psid} -ne 0 ]; then

            echo "php-fpm started successfully!"

         else

            echo "php-fpm started failed!"

         fi

     fi

}

 

stop() {

   checkpid

    if [ ${#psid} -ne 0 ]; then

       echo "killing pid -> "$psid

       kill -9 $psid

         checkpid

         if [ ${#psid} -ne 0 ]; then

            echo "php-fpm stopped failed!"

         else

            echo "php-fpm stopped successfully!"

         fi

   else

      echo "================================"

      echo "warn: php-fpm is not running!"

      echo "================================"

   fi

 

}

 

status() {

   checkpid

   if [ ${#psid} -ne 0 ];  then

      echo "php-fpm is running!"

   else

      echo "php-fpm is not running!"

   fi

}

 

echo "running $1 command as $USER"

 

case "$1" in

   'start')

      start

      ;;

   'stop')

     stop

     ;;

   'restart')

     stop

     start

     ;;

   'status')

     status

     ;;

  *)

     echo "Usage: $0 {start|stop|restart|status}"

     exit 1

esac

exit 0

xiyoufang2020年3月29日未分类No Comments

Build your first Cordova plugin for Ionic Native

一种 Linux JAVA进程突然消失的原因

xiyoufang2020年3月7日未分类No Comments

How To Set Up a Node Project With Typescript

转载的一篇文章,怎么用Typescript开发nodejs项目,直接贴图

主要就是2个配置文件:
1. tsconfig.json 设置好输出JS路径 sourceMap 要为true,这样才能用typescript 进行 debug
2.package.json 指定执行的JS路径,运行前执行tsc

 

一种 Linux JAVA进程突然消失的原因