q9989 发表于 2018-11-8 08:39:40

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]
查看完整版本: Nginx Cannot allocate memory