首页 > 系统相关 >性能瓶颈分析—Nginx

性能瓶颈分析—Nginx

时间:2022-11-11 16:04:19浏览次数:53  
标签:goaccess log nginx 瓶颈 性能 worker access Nginx gzip

性能瓶颈分析—Nginx

nginx基本运行原理

  • 用户连接master中开的端口,控制connect
  • control连接worker
  • 有多少worker就有多少线程
  • worker连接其他服务器

nginx配置参数介绍

  • 全局配置

    • worker_processes:worker进程数。最优值取决于CPU核的数量、存储数据的硬盘数量及负载模式。
    • worker_rlimit_nofile:worker进程的最大打开文件数限制。避免“too many open files”问题(同时要更改系统连接数,使用ulimit -n查看)
  • Evebts模块

    • worker_connections:设置可由一个worker进程同时打开的最大链接数。如果设置了worker_rlimit_nofile,我们可以将这个值设的很高。最大客户数也由系统的可用socket连接数限制(~64K)。
    • multi_accpet:允许多链接。
    • use:使用哪种时间模型轮询。epoll最高效。
  • HTTP模块

    参数名 含义
    AIO on/off 利用系统缓存,内核2.6.22以后版本支持的参数
    directio 521k AIO生效阈值
    sendfile on/off 直接发送出去,不走系统缓存
    tcp_nopush on/off 在一个数据包里发送所有头文件,而不是一个接一个的发送
    tcp_nodelay on/off 不要缓存数据,而是一段一段的发送
    access_log on/off 是否存储访问日志。off则表示不存储,提高性能,但无日志可分析
    error_log crit/notice 只记录严重的错误
    参数名 含义
    keepalive_timeout 10s 链接超时时间
    client_header_timeout
    client_body_timeout
    10s 设置请求头和请求体(各自的)超时时间
    reset_timeout_connection on/off 关闭不响应的客户端链接
    send_timeout 10s 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这个时间段内,客户端没有读取任何数据,nginx就会关闭连接
    limit_conn_zone $binary_remote_addr
    zone=addr:5m:
    保存各种key(比如当前链接数)的共享内存
    limit_conn addr 100 为给定的key设置最大连接数
    参数名 含义
    gzip on 采用gzip压缩的形式发送数据
    gzip_disable "msie6" 为指定的客户端禁用gzip功能
    gzip_static on 先查找是否有预先gzip处理过的资源
    gzip_proxied any 压缩所有的请求
    gzip_min_length 1000 小于1000字节的不压缩
    gzip_comp_level 1-9 压缩等级
    gzip_type text/plain
    text/css
    application/json
    设置需要压缩的数据格式
    参数名 含义
    open_file_cache max=100000
    inactive=20s
    指定了缓存最大数目,一级缓存的时间
    open_file_cache_valid 30s 指定检测正确信息的间隔时间
    open_file_cache_min_uses 2 定义了open_file_cache中指令参数不活动时间期间最小的文件数

    Linux存储栈中DirectIo

    image-20221110171020709

Nginx中的请求时间和响应时间

Nginx:统计PV、UV、独立IP

image-20221110172707002

Nginx请求时间

image-20221110173028433

安装goaccess日志分析工具

wget http://tar.goaccess.io/goaccess-1.1.tar.gz
yum install glib2 glib2-devel GeoIP-devel ncurses-devel
tar xvf goaccess-1.1.tar.gz -C /usr/local
cd /usr/local/
cd goaccess-1.1/
./configure --enable-geoip --enable-utf8  --with-openssl
   ###如果提示:
   ###error: ssl library missing
   ###解决办法:
   ###yum -y install openssl-devel
make && make install

goaccess配置时间日期和日志格式匹配Nginx

如果Nginx的日志格式是下面的例子,goaccess对应使用下列格式。不同的查看操作手册
nginx日志格式:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" $upstream_addr $request_time';
                  
access_log	/var/log/nginx/nginx_access_test1.log main;

goaccess时间日期日志格式:
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" - %^ - %^ %T

操作手册:
https://www.goaccess.cc/?mod=man

使用命令:统计Nginx日志文件里的数据

1. 获取PV数  
cat /var/log/nginx/nginx_access_test1.log | wc -l

2. 获取IP数
cat /var/log/nginx/nginx_access_test1.log | awk '{print $1}' | sort -k1 | uniq -c | wc -l

3. 获取最耗时的请求时间、url、耗时,前10名, 可以修改后面的数字获取更多,不加则获取全部
cat /var/log/nginx/nginx_access_test1.log | awk '{print $4,$7,$NF}' | awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10

4. 获取某一时刻的请求数量,可以把秒去掉得到分钟的数据,把分钟去掉得到小时的数据,以此类推
cat /var/log/nginx/nginx_access_test1.log | grep 2021:15:22:32 | wc -l

5. 获取每分钟的请求数量,输出成csv文件,然后用excel打开,可以生成柱状图
cat /var/log/nginx/nginx_access_test1.log | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}' > access.csv

6. 配置go-access来分析nginx日志
cat /var/log/nginx/nginx_access_test1.log | goaccess --time-format="%H:%M:%S" --date-format="%d/%b/%Y" --log-format="%h - %^ [%d:%t %^]; \"%r\" %s %b \"%R\" - %^\"%u\" - %^ %T" > index.html

  • wc -l :统计行数
  • awk '{print $1}':取分割出来的第一个字段
  • sort -k1:按第一个字段正序排序
  • uniq -c:相邻数据相同合并,即去重
  • awk -F '"' '{print $1,$2,$3}':已“为分隔符分割,去第一、第二、第三字段
  • sort -k3 -rn:-r逆序,-rn逆序数字排序
  • head -10:取前10个

Linux的优化点

  • 压缩参数gzip
  • 缓存open_file_cache
  • worker_processes
  • keepalive_timeout

标签:goaccess,log,nginx,瓶颈,性能,worker,access,Nginx,gzip
From: https://www.cnblogs.com/novice77/p/16880725.html

相关文章

  • 【转】多线程下的fork及写时复制导致的性能问题
    名词解释PHPvsHHVM:PHP指的是​​php.net(Zend)​​​实现的PHP,而HHVM指的是​​Facebook开源的PHP实现​​。PHP-FPM:(PHPFastcgiProcessManager)一个PHPSapi实现......
  • 性能测试岗位能力模型
    星球有同学向我提了一个问题:目前在做性能测试岗位的职级划分和能力模型定义的的工作,想咨询下性能测试岗位按照初/中/高/资深/专家,不同职级应该具备哪些能力,如何衡量这些......
  • 性能大PK count(*)、count(1)和count(列)
    hello,大家好,我是张张,「架构精进之路」公号作者。最近的工作中,我听到组内两名研发同学在交流数据统计性能的时候,说到以下内容:你怎么能用count(*)统计数据呢,count(*)太慢了......
  • Nginx优化与防盗链
    一、Nginx优化1、隐藏版本号可以使用Fiddler工具抓取数据包,查看Nginx版本,也可以在CentOS中使用命令curl-Ihttp://192.168.246.177显示响应报文首部信息。curl-I......
  • Nginx网站服务配置
    概述一款高性能、轻量级Web服务软件稳定性高系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30000~50000个并发请求Nginx和Apache的差异轻量级,ngi......
  • nginx优化与防盗链
    隐藏版本号显示版本号使用curl命令[root@localhost~]#curl-Ihttp://192.168.136.40    隐藏版本号一:修改配置文件1.vim/usr/local/nginx/conf/nginx......
  • 性能优化
    一、webpack优化1、如何用webpack优化前端性能:通过webpack优化前端的手段1.1、代码压缩a、JS代码压缩 利用webpack的UglifyJsPlugin和ParallelUglifyPlugin来压......
  • Nginx 优化与防盗链
    一、隐藏版本号1、隐藏版本号的操作步骤可以使用Fiddler工具抓取数据包,查看Nginx版本,也可以在CentOS中使用命令 curl-Ihttp://192.168.160.60显示响应报文首部......
  • 通过硬件计数器,将性能提升3倍之旅
    通过硬件计数器,将性能提升3倍之旅翻译自:Seeingthroughhardwarecounters:ajourneytothreefoldperformanceincrease本文通过对CPU层面的代码挖掘,发现JVM存在的问......
  • django+uwsgi+nginx+docker 部署出现的问题汇总
    前言部署环境,虚拟机ubuntu20.04,docker+uwsig+django+nginx部署,django+uwsgi一个容器,nginx一个容器。测试出现问题总结:1.postmane发送请求时,postman显示Error:socket......