Nginx Cannot allocate memory
今天早上8:30接到同事电话,说服务器内存或硬盘有问题。简单介绍一下,这台服务器主要运行Nginx Web Upstream应用,属于DMZ非军事区,放有面向全球客人的主站切入点。我们结合第三方监控网站存活,当前未收到任何页面挂的消息可确认没有影响到网站的正常运营。
一、Zabbix运行数据
1. CPU忙碌,从北京时间凌晨4点开始,直到9点恢复正常。
2. Cached缓存低,从北京时间凌晨4点开始,直到9点恢复正常。
3. Swap用尽,从北京时间凌晨3点开始,直到9点恢复正常。
二、处理过程
当前访问情况,41条500状态码。但有1148条Nginx定义的499状态码,对应的是"client has closed connection",意思是服务端处理时间过长,客户端会由于请求时间过长而放弃该请求。
$ tail -100000 pwww.com.log |awk '{print $9}'|sort |uniq -c |sort -nr 84035 200
6288 304
5466 "-"
2140 301
1148 499
457 302
376 404
41 500
24 206
14 408
8 403
3 400
当前连接情况,现处于白天低峰期,连接数不高。
$ netstat -ntal |awk '{print $6}'|sort |uniq -c |sort -nr 8806 ESTABLISHED
2291 TIME_WAIT
272 FIN_WAIT2
78 CLOSE_WAIT
75 FIN_WAIT1
67 LAST_ACK
45 SYN_RECV
36 LISTEN
9 CLOSING
5 SYN_SENT
1 Foreign
1 established)
当前CPU使用情况,b表示阻塞,当前被动等待某个事件。
# vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
rb swpd free buffcache si so bi bo in cs us sy> 8 15 105224825544 416027336 0 0 22 212 0 0 112 8340
0 15 105224828092 456430036 0 01546 876 6975 4823 1024 840
1 15 105224827480 484031440 0 0 806 604 5838 4515910 900
0 16 105224824288 519633944 16 01030 874 6876 4969910 890
1 20 105224822480 538035084 0 01256 726 5633 4358551 890
当前内存使用情况,free+buffers+cached内存几乎用尽,内存不够把Swap用尽,又或者内存泄漏。
# free -m total used free shared buffers cached
Mem: 3940 3918 22 0 5 39
-/+ buffers/cache: 3873 66
Swap: 1027 1027 0
我们来分析下,哪个进程占用了大量内存,且做了哪些操作。
$ ps -aux|sort -k5nr|awk 'BEGIN{print "PID VSZ"}{print $2,$5}'|awk 'NR
页:
[1]