1.1.查看httpd进程数

在Linux下查看WEB服务器的负载情况,最简单有有效的方式就是查看Apache Server Status(如何开启Apache Server Status点这里),在没有开启Apache Server Status的情况下,或安装的是其他的Web Server,比如Nginx的时候,下面的命令就体现出作用了。

s -ef|grep httpd|wc -l命令 

1388

#ps -ef|grep httpd|wc -l

统计httpd进程数,连个请求会启动一个进程,适用于Apache服务器。表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。

netstat -nat|grep -i “80”|wc -l命令

#netstat -nat|grep -i “80”|wc -l

4341

netstat -an会打印系统当前网络链接状态,而grep -i “80″是用来提取与80端口有关的连接的, wc -l进行连接数统计。最终返回的数字就是当前所有80端口的请求总数。

netstat -na|grep ESTABLISHED|wc -l命令

#netstat -na|grep ESTABLISHED|wc -l

376

netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。最终返回的数字就是当前所有80端口的已建立连接的总数。

netstat -n | awk ‘/^tcp/ {++S[KaTeX parse error: Expected 'EOF', got '}' at position 4: NF]}̲ END {for(a in …NF]} END {for(a in S) print a, S[a]}’

FIN_WAIT_1 286

FIN_WAIT_2 960

SYN_SENT 3

LAST_ACK 32

CLOSING 1

CLOSED 36

SYN_RCVD 144

TIME_WAIT 2520

ESTABLISHED 352

返回参数的说明如下:

SYN_RECV表示正在等待处理的请求数;

ESTABLISHED表示正常数据传输状态;

TIME_WAIT表示处理完毕,等待超时结束的请求数。


1.1. 查询服务器http请求各种状态数量

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

1.2. 查看服务器请求数量

netstat -na | wc -l

1.3. 查询服务器中TCP连接数和并发量的相关指令

经常在线上环境下,一种特别常见的情况:服务器突然CPU暴增、机器特别卡顿、导致机器崩掉,这种情况影响面积极大。产生这样情况众多,还有可能会有如此情况,服务器中的mq挂掉了,导致队列中已有的worker无法消化,在短时间内终端又过来大量的请求,直接将入口机器的外网带宽打满,服务器压力巨大,系统直接无法正常使用。

常见的TCP指令,对不同的IP进行连接数统计。如下所示:

Ø 对TCP连接的五种状态连接数分别进行统计

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Ø 连接数与等待数量

netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'

#ESTABLISHED 897;#TIME_WAIT 39

Ø 常见TCP连接查询

netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'

netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'  

netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn  

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

Ø 需要查看80端口连接数最多的20个IP

Netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

Ø 查找较多time_wait连接

netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

Ø 查找较多的SYN连接

netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

Ø 查看当前并发访问数

netstat -an | grep ESTABLISHED | wc -l

Ø 查看所有连接请求

netstat -tn 2>/dev/null

 注:但是只要established的,则grep “ESTABLISHED”:

netstat -tn | grep ESTABLISHED 2>/dev/null

Ø 查看访问某一IP的所有外部连接IP(数量由多到少)

netstat -nt | grep 121.41.30.149:80 | awk '{print $5}' | awk -F: '{print ($1>$4?$1:$4)}' | sort | uniq -c | sort -nr | head

Ø 根据端口查找进程

netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1

1.4. 根据nginx的访问日志判断

在网站部署的目录下,在当我们对nginx进行部署后,通常会在logs文件夹用于存放一些日志文件。我们可以根据其中的access.log文件查看一些访问记录。

Ø 查看访问记录,从1000行开始到3000

cat access.log |head -n 3000|tail -n 1000

Ø 查看访问记录,从1000行开始,显示200行

cat access.log |tail -n +1000 |head -n 200

Ø 根据访问IP统计UV

awk '{print $1}'  access.log|sort | uniq -c |wc -l

Ø 统计访问URL统计PV

awk '{print $7}' access.log|wc -l

Ø 查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

Ø 查询访问最频繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

Ø 通过日志查看含有send的url,统计ip地址的总连接数

cat access.log | grep "send" | awk '{print $1}' | sort | uniq -c | sort -nr

Ø 通过日志查看当天指定ip访问次数过的url和访问次数

cat access.log | grep "222.132.90.94" | awk '{print $7}' | sort | uniq -c | sort -nr