linux系统nginx工具性能优化

nginx性能优化

    • nginx性能优化
      • 当前系统结构瓶颈
      • 了解业务模式
      • 性能与安全
      • 系统与nginx性能优化
        • 文件句柄
          • 系统全局性修改
          • 进程局部性修改
          • cpu的亲和配置
          • 配置worker_processes
        • nginx通用配置优化
          • cpu绑定
          • nginx 隐藏版本
          • nginx 修改上传文件大小
          • nginx 启用压缩传输

nginx性能优化

当前系统结构瓶颈

可以通过查看当前cpu负荷,内存使用率,进程使用率来做简单判断。还可以通过操作系统的一些工具来判断当前系统性能瓶颈,如分析对应的日志,查看请求数量。也可以通过nginx的http_stub_status_module模块来查看对应的连接数,总握手次数,总请求数。也可以对线上进行压力测试,来了解当前的系统能性能,并发数,做好性能评估。

了解业务模式

了解每一个接口业务类型是什么样的业务,了解系统层级结构,每一层在中间层做的是代理还是动静分离,还是后台进行直接服务。需要对业务接入层和系统层次要有一个梳理

性能与安全

性能与安全也是一个需要考虑的因素,经常注重性能忽略安全或注重安全又忽略性能。要评估好两者的关系,把握好两者的孰重孰轻,以及整体的相关性。权衡好对应的点。

系统与nginx性能优化

根据影响性能方面做一个全体的评估和优化。

网络(网络流量、是否有丢包,网络的稳定性都会影响用户请求)
系统(系统负载、饱和、内存使用率、系统的稳定性、硬件磁盘是否有损坏)
服务(连接优化、内核性能优化、http服务请求优化都可以在nginx中根据业务来进行设置)
程序(接口性能、处理请求速度、每个程序的执行效率)
数据库、底层服务
文件句柄
在linux/unix操作系统中一切皆文件,设备是文件,文件是文件,文件夹也是文件。当用户每发起一次请求,就会产生一个文件句柄。文件句柄可以简单的理解为文件句柄就是一个索引。文件句柄就会随着请求量的增多,进程调用频繁增加,那么产生的文件句柄也就会越多。系统默认对文件句柄是有限制的,不可能会让一个进程无限制的调用句柄。因为系统资源是有限的,所以需要限制每一个服务能够使用多大的文件句柄。操作系统默认使用的文件句柄是1024个句柄。
系统全局性修改
vim /etc/security/limits.conf #*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4#root只是针对root这个用户来限制,soft只是发提醒,操作系统不会强制限制,一般的站点设置为一万左右就ok了
root soft nofile 65535
root hard nofile 65535
# *代表通配符 所有的用户
*    soft nofile 25535
*    hard nofile 25535可以看到root和*,root代表是root用户,*代表的是所有用户,后面的数字就是文件句柄大小。可以根据个人业务来进行设置。
进程局部性修改
vim /etc/nginx/nginx.confuser  nginx;
worker_processes  1;  
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;worker_rlimit_nofile 65535; #进程限制
events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''"$args" "$request_uri"';access_log  /var/log/nginx/access.log  main;sendfile        on; #tcp_nopush     on; keepalive_timeout  65; #gzip  on; include /etc/nginx/conf.d/*.conf;
}worker_rlimit_nofile是在进程上面进行限制。
cpu的亲和配置
cpu的亲和能够使nginx对于不同的work工作进程绑定到不同的cpu上面去。就能够减少在work间不断切换cpu,把进程通常不会在处理器之间频繁迁移,进程迁移的频率小,来减少性能损耗

查看物理cpu

[root@nginx-server ~]# cat /proc/cpuinfo | grep "physical id" | sort|uniq | wc -l

查看cpu核心数

[root@nginx-server ~]# cat /proc/cpuinfo|grep "cpu cores"|uniq

查看cpu使用率

[root@nginx-server ~]#top  回车后按 1
配置worker_processes
vim /etc/nginx/nginx.conf
将刚才查看到自己cpu * cpu核心就是worker_processesworker_processes auto; #根据自己cpu核心数配置,这里也可以设置为auto
nginx通用配置优化
cpu绑定
#将nginx进程设置为普通用户,为了安全考虑
user nginx; #当前启动的worker进程,官方建议是与系统核心数一致
worker_processes 2;
#方式一, 第一个work进程绑定第一个cpu核心,第二个work进程绑定到第二个cpu核心,依次内推 直到第16个
#worker_cpu_affinity 0000000000000000 0000000000000001 0000000000000010 0000000000000100 ... 1000000000000000#方式二,当 worker_processes 2 时,表明 第一work进程可以绑定第 2 4 6 8 10 12 14 16 核心,那么第二work进程就绑定 奇数核心
#worker_cpu_affinity 1010101010101010 0101010101010101;#方式三,就是自动分配绑定
worker_cpu_affinity auto;#日志配置成warn
error_log /var/log/nginx/error.log warn; 
pid /var/run/nginx.pid;#针对 nginx 句柄的文件限制
worker_rlimit_nofile 35535;
#事件模型
events {#使用epoll内核模型use epoll;#每一个进程可以处理多少个连接,如果是多核可以将连接数调高 worker_processes * 1024worker_connections 10240;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;charset utf-8;  #设置字符集#设置日志输出格式,根据自己的情况设置log_format  main  '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''"$args" "$request_uri"';access_log  /var/log/nginx/access.log  main;sendfile        on;   #对静态资源的处理比较有效#tcp_nopush     on;   #如果做静态资源服务器可以打开#tcp_nodelay     on;   #当nginx做动态的服务时可以选择打开keepalive_timeout  65; #########Gzip modulegzip  on;    #文件压缩默认可以打开gzip_disable "MSIE [1-6]\."; #对于有些浏览器不能识别压缩,需要过滤如ie6gzip_http_version 1.1;include /etc/nginx/conf.d/*.conf;
}
nginx 隐藏版本
http {server_tokens off;
}
nginx 修改上传文件大小
http {client_max_body_size 10m;
}
nginx 启用压缩传输
http {#开启gzipgzip  on;  #低于1kb的资源不压缩 gzip_min_length 1k;#压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。 gzip_comp_level 5; #需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;  #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)gzip_disable "MSIE [1-6]\.";  #是否添加“Vary: Accept-Encoding”响应头gzip_vary on;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法题】76. 最小覆盖子串

题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数…

conda多虚拟环境的搭建与切换

在 Python 开发中,很多时候我们希望每个应用有一个独立的 Python 环境(比如应用 1 需要用到 TensorFlow 1.X,而应用 2 使用 TensorFlow 2.0)。这时,Conda 虚拟环境即可为一个应用创建一套 “隔离” 的 Python 运行环境…

copilot和chatGPT的区别分析

Copilot是一个基于人工智能的代码提示工具,由GitHub和人工智能公司合作开发。它可以利用机器学习技术和大量训练数据生成高质量的代码,提高开发者的编码效率。Copilot的工作原理是基于自然语言处理、机器学习和深度神经网络技术,以及大规模实…

uni-app学习与快速上手

文章目录 一、uni-app二、学习与快速上手三、案例四、常见问题五、热门文章 一、uni-app uni-app是一种基于Vue.js开发框架的跨平台应用开发框架,可以用于同时开发iOS、Android、H5和小程序等多个平台的应用。uni-app的设计理念是一套代码可以编译到多个平台运行&a…

CentOS 7 下安装 Docker 及配置阿里云加速服务

一、系统要求与环境准备 在 CentOS 7 系统中安装 Docker 前,请确保您的内核版本满足最低要求(Docker 要求内核版本至少为 3.10 或更高)。运行以下命令检查当前内核版本: uname -r若内核版本符合条件,接着更新系统至最…

这些SQL你练习过吗?(网友提供的SQL)

行转列SQL练习 题目 把图1转换成图2结果展示 图1 CREATE TABLE TEST_TB_GRADE (ID int(10) NOT NULL AUTO_INCREMENT,USER_NAME varchar(20) DEFAULT NULL,COURSE varchar(20) DEFAULT NULL,SCORE float DEFAULT 0,PRIMARY KEY (ID) )insert into TEST_TB_GRADE(USER_NAME, CO…

STM32单片机项目之多功能智能小车硬件设计

基于STM32单片机多功能智能小车功能说明: TFTLCD显示按键LVGL(菜单、小车工作模式选择、设置)手机蓝牙遥控模式射频手柄遥控模式5路红外寻迹模式超声波避障模式语音播报低功耗控制 硬件原理图设计 单片机最小系统: 由于要使用…

通信技术的OSI协议层

通信协议层是网络通信虫的重要组成部分.它定义了在网络进行数据传输时所需遵循的规则和流程。而OSI参考模型是由国际标准化组织提出的概念模型,可以为各种计算机互连构成网络提供标准框架。在用 OSI模型实现融媒体平台网络组建的过程中,相关主体需要认识…

滴滴开源小程序框架 Mpx 新特性:局部运行时能力增强

Mpx 是滴滴开源的一款增强型跨端小程序框架,自 2018 年立项开源以来如今已经进入第六个年头,在这六年间,Mpx 根植于业务,与业务共同成长,针对小程序业务开发中遇到的各类痛点问题提出了解决方案,并在滴滴内…

NVIDIA Isaac ROS - 入门教程(一)

系列文章目录 前言 欢迎访问 Isaac ROS,这是一套硬件加速、高性能、低延迟的 ROS 2 软件包,用于制造自主机器人,充分利用 Jetson 和其他英伟达平台的强大功能。 查看入门指南,开始使用 Isaac ROS。设置 Isaac ROS Buildfarm&…

如何让思维系统化,拥有「自己的想法」?

先思考一个问题: 如果外星人来访地球,你觉得他们更有可能是善意的,还是恶意的? 你的反应是什么,会如何切入思考? 一般人可能会这样回答: 当然是恶意的,因为要争夺资源啊,…

前端工程化之:webpack1-3(模块化兼容性)

一、模块化兼容性 由于 webpack 同时支持 CommonJs 和 ES6 module ,因此需要理解它们互操作时 webpack 是如何处理的。 二、同模块化标准 如果导出和导入使用的是同一种模块化标准,打包后的效果和之前所说的模块化没有任何差异。 CommonJS&#xff…

25考研政治备考计划

各位小伙伴大家好,今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段,直接就是强化,强化的内容也就是听课,刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课,推荐刷肖1000 *9月中-10月中 背腿姐的背…

ELK+Filebeat 部署实验

Filebeat是轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行…

overflow产生的滚动条样式设置

修改overflow产生的滚动条样式,主要可以通过如下三个伪元素设置: 1)-webkit-scrollbar:设置水平滚动条的高度,垂直滚动的宽度 2)-webkit-scrollbar-thumb:设置滚动条里面的滑块样式 3)-webkit-scrollbar-track&…

MySQL介绍、安装和卸载

MySQL入门——网安基础 1. 数据库基本概念2. 数据库类型和常见的关系型数据库2.1 数据库类型2.2 常见的关系型数据库 3. MySQL介绍4. MySQL8的安装和卸载 1. 数据库基本概念 1. 数据 所谓数据(Data)是指对客观事物进行描述并可以鉴别的符号,…

万物简单AIoT 端云一体实战案例学习 之 空气质量检测系统

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 环境污染、空气污染是人类一直所关心并且讨论的永恒话题,人们对优质的环境和健康的身体非常向往。因此,如果有一种可以检测周围环境的空气质量的设备并且环境数据…

RocketMQ源码分析之消息重试(真相竟然是延时消息)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 RocketMQ版本 5.1.0 普通消息 消息重试的的实现分并普通消息和顺序消息。两者的重试机制大同小异。我们这里先看看不同消息 这里是官网定义的消息重试次数以及…

docker 存储管理

文章目录 docker 存储管理容器存储方案docker 容器存储解决方案 docker 存储驱动基本概述存储驱动的选择原则主流的 docker 存储驱动docker 版本支持的存储驱动 overlay2 存储驱动OverlayFSoverlay2 存储驱动要求配置 docker 使用 overlay2 驱动 overlay2 存储驱动的工作机制Ov…

Linux的 .bashrc 有什么作用?

一、.bashrc 是什么? 有什么用? .bashrc是一个存储在你的home目录下的隐藏文件,它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时,.bashrc文件就会被执行,加载你设置的环境变量,别名,函数…