一、服务器流量监控工具vnStat的简单使用
vnStat是为Linux和BSD设计的基于控制台的网络流量监控工具,通过它可以非常方便在命令行查看流量统计情况。它可以保留某个或多个所选择的网络接口的网络流量日志。为了生成日志,vnStat使用内核提供的信息。换句话说,它不会嗅探网络流量,确保尽量少用系统资源。
安装起来也很简单,直接yum安装即可。安装启动命令如下:
[root@007 ~]# yum -y install vnstat
useradd: failed to reset the lastlog entry of UID 497: Is a directoryInstalling : vnstat-1.11-1.el6.x86_64 1/1 Verifying : vnstat-1.11-1.el6.x86_64 1/1
Installed:vnstat.x86_64 0:1.11-1.el6
Complete!
[root@007 ~]# vnstat --helpvnStat 1.11 by Teemu Toivola <tst at iki dot fi>-q, --query query database-h, --hours show hours-d, --days show days-m, --months show months-w, --weeks show weeks-t, --top10 show top10-s, --short use short output-u, --update update database-i, --iface select interface (default: eth0)-?, --help short help-v, --version show version-tr, --traffic calculate traffic-ru, --rateunit swap configured rate unit-l, --live show transfer rate in real time
See also "--longhelp" for complete options list and "man vnstat".
[root@007 ~]# vnstat -u -i eth1
Error: Unable to read database "/var/lib/vnstat/eth1".
Info: -> A new database has been created.
[root@007 ~]# /etc/init.d/vnstat status
vnstatd is stopped
[root@007 ~]# /etc/init.d/vnstat start
Starting vnstatd:
vnstat常用的命令选项如下:下图是安装后在服务器查看的数据
vnstat -h #显示最近24小时的流量情况
vnstat -d #显示最近30天的流量情况
vnstat -m #显示最近12个月的流量情况
vnstat -l #显示实时的流量情况
vnstat -t #显示所有记录中,流量使用最多的10天
除此外,网上也有一些以图示方法显示流量数据的工具,比如:vnstat PHP frontend。官网地址:vnStat PHP frontend
下载下来移至PHP运行目录,修改一下配置文件config.php.如下:
[root@007 ~]# wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz
...
Length: 57460 (56K) [application/x-gzip]
Saving to: “vnstat_php_frontend-1.5.1.tar.gz”
[root@007 ~]# sudo tar zxvf vnstat_php_frontend-1.5.1.tar.gz #修改config.php配置文件
$iface_title['eth1'] = 'PublicNet';
然后在流星器里访问即可实现图表查看流量数据:
二、关于Linux的软中断信号(signal)的一点内容
signal信号全称软中断信号,是用来通知进程发生了异步事件。是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制。
UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号;SIGKILL表示终止程序运行的信号等等。Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,只有信号值小于SIGRTMIN的信号(即1-31)。在Linux中对信号在保留原有信号的基础上进行了扩充,Linux中的信号可以通过 kill -l查看,列表如下:
#Linux中的信号可以通过 kill -l查看,也可以通过/usr/include/sys/signal.h中查看 [root@04007 shell]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
从两个不同的角度分类,信号可以分为:可靠信号与不可靠信号(可靠性角度);实时信号与非实时信号(与时间的关系角度)。不过实际可以看作是一个分类,非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。各信号的意义如下:
#define SIGHUP 进程由於控制终端死去或者控制终端发出起命令
#define SIGINT 键盘中断所产生的信号
#define SIGQUIT 键盘终止
#define SIGILL 非法的指令
#define SIGTRAP 进程遇到一个追踪(trace)或者是一个中断嵌套
#define SIGABRT 由abort系统调用所产生的中断信号
#define SIGIOT 类似於SIGABRT
#define SIGBUS 进程试图使用不合理的记忆体
#define SIGFPE 浮点异常
#define SIGKILL KILL
#define SIGUSR1 用户自定义
#define SIGSEGV 段错误
#define SIGUSR2 用户自定义
#define SIGPIPE 管道操作时没有读只写
#define SIGALRM 由alarm系统调用产生的timer时钟信号
#define SIGTERM 收到终端信号的进程
#define SIGSTKFLT 堆叠错误
#define SIGCHLD 子进程向父进程发出的子进程已经stop或者终止的信号
#define SIGCONT 继续运行的信号
#define SIGSTOP stop
#define SIGTSTP 键盘所产生的stop信号
#define SIGTTIN 当运行在後状态时却需要读取stdin的资料
#define SIGTTOU 当运行在後状态时却需要写向stdout
#define SIGURG socket的紧急情况
#define SIGXCPU 进程超额使用CPU分配的时间
#define SIGXFSZ 进程使用了超出系统规定文件长度的文件
#define SIGVTALRM 内部的alarm时钟过期
#define SIGPROF 在一个程式段中描绘时钟集过期
#define SIGWINCH 终端视窗的改变
#define SIGIO 非同步IO
#define SIGPOLL SIGIO pollable事件发生
在上面的列表中看到了一个眼熟的东西:SIGUSR2,对USR2这个信号就是我们平滑重启PHP命令中使用的kill -USR2 php的PID值中的信号意义 。而正是unix系统考虑了预留这么一个USR2信号从而可以让php在其软件中支持使用此信息进行平滑重启。专业讲USR2信号实现平滑重载所有php的worker进程并重新载入配置和二进制模块,信号太多,作为应用层的程序员我觉得也没有必要全部清楚。了解以下这些信号即可吧:
SIGINT 也就是Ctrl+C的信号
SIGKILL 表示终止程序运行的信号
SIGHUP 按下Ctrl-z将进程置于后台时发送的信号
SIGQUIT 与SIGINT类似,但由QUIT字符(通常是Ctrl+\)来控制,比如使用top查看系统情况时按Ctrl+\即是发送SIGQUIT信号。
SIGCHLD表示子进程状态改变信号