一个简单的监控 CPU 的脚本

最近服务器经常出现 CPU 100%,然后超负荷运行的情况。

按照朋友的经验,可能是数据库的问题。查了一下,果然是,虽然目前还不知道是什么原因。

目前就做了一个临时处理,查看 CPU 是否异常,异常的话就重启 postgresql。并生成标记文件 tmp,停止监控。每隔半小时会删除标记文件 tmp,继续监控。

#!/bin/bash

cpu=`vmstat| sed -n '3p' | awk '{print $13}'`;

if [ $cpu -gt 95 ]; then
    if [ ! -e /tmp/restart_postgres.tmp ]; then
      touch /tmp/restart_postgres.tmp

      service postgresql restart;
      echo "cpu: $cpu . service postgresql restart";
    fi
fi

升级到 php7

嗯,昨晚在浏览一个github项目:微信小程序开发资源汇总,不知道怎么抽筋了然后跑去升级php7了。(●ˇ∀ˇ●)。嘛,记录一下升级过程。

虽说是升级,但是我并没有破坏原来的php5.6的环境,如果需要切换环境的话,只要做少量修改就可以恢复为原来的环境了。

下载

cd /tmp
wget http://am1.php.net/distributions/php-7.1.5.tar.gz

安装

tar -xzvf php-7.1.5.tar.gz
cd php-7.1.5 
./configure --prefix /usr/share/php7 --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-pcre-regex --with-openssl=shared --with-kerberos --with-zlib=shared --enable-bcmath=shared --with-bz2=shared --enable-calendar=shared --with-curl=shared --enable-exif=shared --with-gd=shared --with-jpeg-dir=/usr/include/jpeg8 --with-png-dir=/usr/include/libpng12 --with-gettext=shared --with-gmp=shared --with-mhash=shared --enable-intl=shared --enable-mbstring=shared --with-mcrypt=shared --enable-opcache --with-pdo-pgsql=shared --with-pgsql=shared --enable-shmop=shared --enable-soap=shared --enable-sockets=shared --with-xsl=shared --enable-zip=shared
make clean && make && make install
make test

配置

保留以前链接

cd /usr/local/bin
ln -s /usr/share/php5.6/bin/php php5.6
ln -s /usr/share/php5.6/sbin/php-fpm php-fpm5.6

cp /usr/share/php5.6/lib/php.ini /usr/share/php7/lib/php.ini
cp /usr/share/php5.6/etc/php-fpm.conf /usr/share/php7/etc/php-fpm.conf 
cp /tmp/php-7.1.5/sapi/fpm/php-fpm /usr/share/php7/sbin/php-fpm
cp -R /usr/share/php5.6/etc/pool /usr/share/php7/etc/pool

重建链接

rm php php-fpm
ln -s /usr/share/php7/bin/php php
ln -s /usr/share/php7/sbin/php-fpm php-fpm

完成后重启一下机器,重新启动php-fpm即可。


nslookup 查看域名 dns 地址

域名是需要DNS才能正常解析的。最近我有个域名在 dnspod 上老是无法解析,提示 NS 地址还未修改,头疼。于是查看了域名 dns 解析地址,易名中国真是坑(应该就是他的锅吧。

nslookup命令,是Linux里非常常用的网络命令,简而言之就是“查DNS信息用的”。 作者是Andrew Cherenson, 他是一位计算机科学的高材生,曾经就读于哈佛大学和加州大学伯克利分校。 目前就职于ChoiceStream公司。

windows 下:

nslookup -qt=ns xxx.org

显示:

服务器:  cache-nn.gxcc.net
Address:  221.7.128.68

*** cache-nn.gxcc.net 找不到 xxx: Non-existent domain

Linux 下:

nslookup

显示:

> xxx.org
Server:         100.100.2.136
Address:        100.100.2.136#53

** server can't find xxx: NXDOMAIN

如果是正确的情况,应该这么显示

服务器:  cache-nn.gxcc.net                     
Address:  221.7.128.68                                                                        

非权威应答:                                    
kelu.org        nameserver = f1g1ns2.dnspod.net
kelu.org        nameserver = f1g1ns1.dnspod.net

或者

> kelu.org
Server:         100.100.2.136
Address:        100.100.2.136#53

Non-authoritative answer:
Name:   kelu.org
Address: 47.52.46.212

启动nginx状态页

nginx 内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助。

在你的 nginx.conf 配置的server中添加如下配置:

location /nginx_status {
    stub_status on;
    access_log off;
    allow 192.168.10.0/24;
    deny all;
}

然后重启 nginx,即可成功。

你可能在重启的时候遇到

unknown directive "stub_status"

这是因为nginx没有加上http_stub_status_module,需要重新安装这个插件:

./configure --with-http_stub_status_module

访问该网页,可以看到类似如下的信息:

Active connections: 1998 
server accepts handled requests
1189721 1189721 2667471 
Reading: 2 Writing: 10 Waiting: 1980

说明:

  • Active connection -活跃的连接数量
  • server accepts handled requests 总共处理了1189721个连接,成功创建了1189721次握手,总共处理了2667471个请求
  • Reading——读取客户端的连接数
  • Writing——响应数据到客户端的数量
  • Waitting——开启keep-alive的情况下,这个只等于active-(Reading+Writing),意思就是nginx已经处理完正在等候下一次请求指令的驻留连接