故障集锦

能连上机房主机,但是执行命令卡

背景:今早用xshell连上线上机器查看日志,能够连接上主机,但是执行命令卡,比如top、ll等命令卡,于是就开始排查,开始以为是工具问题,于是乎就重新安装了xshell,还是一样,另外使用了babun,CRT等远程连接工具,还是一样的效果。用crtl + c也结束不了。以下是效果图:

Connecting to 192.168.2.18:1898...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Sat Jan  7 11:55:54 2017 from 192.168.3.2

root@BJJGSERVER7: ~
# top

网上搜索一两个小时无果,于是请教总监,说了句应该是win mtu值导致的

Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。

C:\WINDOWS\system32>netsh interface ipv4 show subinterfaces

   MTU  MediaSenseState   传入字节  传出字节      接口
------  ---------------  ---------  ---------  -------------
4294967295                1          0    1043428  Loopback Pseudo-Interface 1
  1500                5          0          0  蓝牙网络连接 2
  1500                1  5332716443  335378834  WLAN 2
  1500                5          0          0  以太网 2
  1500                5          0          0  本地连接* 7
  1500                5          0          0  本地连接* 8
  1500                1       3936     114097  以太网 3
  1500                1          0     101166  以太网 4

C:\WINDOWS\system32>netsh interface ipv4 set subinterface "WLAN 2" mtu=1380 store=persistent
确定。

C:\WINDOWS\system32>netsh interface ipv4 show subinterfaces

   MTU  MediaSenseState   传入字节  传出字节      接口
------  ---------------  ---------  ---------  -------------
4294967295                1          0    1043428  Loopback Pseudo-Interface 1
  1500                5          0          0  蓝牙网络连接 2
  1380                1  5333274289  335543910  WLAN 2
  1500                5          0          0  以太网 2
  1500                5          0          0  本地连接* 7
  1500                5          0          0  本地连接* 8
  1500                1       3936     114901  以太网 3
  1500                1          0     101970  以太网 4

Zabbix报警Lack of free swap space

报警显示swap不够,是因为重新部署了几个java程序,然后立马把程序放在其他机器,报警几天还是持续有,因为太多程序,所以机器尽量不重启,然后需要分析那些程序占用swap,然后重启程序即可,报警详细截图如下

以下是脚本是分析占用swap最多的程序的前十个程序

 [root@server198 ~]# cat swap.sh
#!/bin/bash
function swapoccupancy ()
{
    echo -e "Pid\tSwap\tProgame"
    num=0
    for pid in `ls -1 /proc|egrep "^[0-9]"`
    do
        if [[ $pid -lt 20 ]]
        then
            continue
        fi
        program=`ps -eo pid,command|grep -w $pid|grep -v grep|awk '{print $2}'`
        for swap in `grep Swap /proc/$pid/smaps 2>/dev/null|awk '{print $2}'`
        do
            let num=$num+$swap
        done
        echo -e "${pid}\t${num}\t${program}"
        num=0
    done|sort -nrk2|head
}
swapoccupancy
exit 0

然后执行脚本,可能会导致机器负载升高,取决于机器运行的程序多少,以下是运行结果

[root@server198 ~]# sh swap.sh
Pid Swap    Progame
8807    1972956 /data/app/java/bin/java
8884    1117536 /data/app/java/bin/java
8091    486644  /usr/bin/mongod
11231   320180  /data/app/java/bin/java
11869   279472  /data/app/java/bin/java
38591   196480  java
41480   156956  /data/app/java/bin/java
18973   99272   /data/app/java/bin/java
23299   67280   /data/app/java/bin/java
38729   64384   java

然后根据程序pid查看对应的进程,挑选个合适的时间重启服务,把脚本执行的复制到文本,用for循环打印出对应的程序

[root@server198 ~]# vim swap_program.txt
[root@server198 ~]# cat swap_program.txt
Pid Swap    Progame
8807    1972956 /data/app/java/bin/java
8884    1117536 /data/app/java/bin/java
8091    486644  /usr/bin/mongod
11231   320180  /data/app/java/bin/java
11869   279472  /data/app/java/bin/java
38591   196480  java
41480   156956  /data/app/java/bin/java
18973   99272   /data/app/java/bin/java
23299   67280   /data/app/java/bin/java
38729   64384   java

[root@server198 ~]# cat swap_program.txt|sed '1d'|awk '{print $1}'
8807
8884
8091
11231
11869
38591
41480
18973
23299
38729
[root@server198 ~]# for n in $(cat swap_program.txt|sed '1d'|awk '{print $1}');do ps -ef|grep $n|grep -v grep;done

参考