22、编译安装nginx及性能优化
22.1、编译安装nginx:
1、下载nginx:
[root@slave-node1 ~]# mkdir -p /tools/
[root@slave-node1 ~]# cd /tools/
[root@slave-node1 tools]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
2、安装:
[root@slave-node1 tools]# yum install openssl openssl-devel gcc pcre pcre-devel -y
[root@slave-node1 tools]# useradd -M -s /sbin/nologin nginx
[root@slave-node1 tools]# tar -xzf nginx-1.16.0.tar.gz
[root@slave-node1 tools]# cd nginx-1.16.0/
[root@slave-node1 nginx-1.16.0]# ./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.16.0
[root@slave-node1 nginx-1.16.0]# make && make install
[root@slave-node1 nginx-1.16.0]# ln -s /application/nginx-1.16.0/ /application/nginx
3、启动nginx:
[root@slave-node1 nginx-1.16.0]# cd /application/
[root@slave-node1 application]# nginx/sbin/nginx
#nginx/sbin/nginx -s reload:重启nginx
#nginx/sbin/nginx -s stop:关闭nginx
[root@slave-node1 application]# netstat -tunlp | grep 80
4、访问验证:
http://172.16.1.91
22.2、nginx性能优化:
1、性能优化概述:
在做性能优化前, 我们需要对如下进行考虑:
(1)当前系统结构瓶颈:
观察指标
压力测试
(2)了解业务模式:
接口业务类型
系统层次化结构
(3)性能与安全:
性能好安全弱
安全好性能低
2、影响性能的指标:
影响性能方便整体关注
(1)网络:
网络的流量
网络是否丢包
这些会影响http的请求与调用
(2)系统:
硬件有没有磁盘损坏,磁盘速率
系统负载、内存、系统稳定性
(3)服务:
连接优化、请求优化
根据业务形态做对应的服务设置
(4)程序
接口性能
处理速度
程序执行效率
(5)数据库
每个架构服务与服务之间都或多或少有一些关联, 我们需要将整个架构进行分层, 找到对应系统或服务的短板, 然后进行优化。
3、压力测试工具:
(1)安装压力测试工具ab:
[root@slave-node1 application]# yum install httpd-tools -y
(2)使用ab工具进行压测:
[root@slave-node1 application]# ab -n 2000 -c 2 http://172.16.1.91/index.html
# -n:表示总的请求数;-c:表示并发请求数;-k:是否开启长连接
主要关注的参数如下:
Time taken for tests:总花费总时长
Complete requests:总请求数
Failed requests:请求失败数
Requests per second:每秒多少请求/s(总请求出/总共完成的时间)
Time per request:客户端访问服务端, 单个请求所需花费的时间
Time per request:服务端处理单个请求所花的时间
Transfer rate:判断网络传输速率,观察网络是否存在瓶颈
4、系统性能优化:
(1)文件句柄:
1)Linux一切皆文件,文件句柄可以理解为就是一个索引;
文件句柄会随着我们进程的调用频繁增加;
系统默认对文件句柄有限制,不能让一个进程无限的调用;
需要限制每个进程和每个服务使用多大的文件句柄;
文件句柄是必须要调整的优化参数。
2)调整文件描述符大小:
echo '* - nofile 65535' >>/etc/security/limits.conf
ulimit -SHn 65535
ulimit -n
(2)内核参数设置:
1)配置内核参数:
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
EOF
说明:
net.ipv4.tcp_tw_reuse = 1
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。
net.ipv4.ip_local_port_range = 1024 65535
#指定外部连接的端口范围。默认值为32768 61000
2)生效配置的内核参数:
sysctl -p
5、nginx性能优化:
CPU亲和, 减少进程之间不断频繁迁移, 减少性能损耗。
(1)查看当前cpu的状态:
[root@slave-node1 ~]# lscpu |grep "CPU(s)"
#一颗物理cpu,每颗2核心,总共2核心。
(2)将nginx worker进程绑定到不同的核心上:
启动多少worker进程, 官方建议和cpu核心一致。
1)第一种绑定组合方式:
worker_processes 2;
worker_cpu_affinity 01 10;
# 表示:两核cpu开启2个进程,01表示启用第一个cpu内核,10表示启用第二个cpu内核。
2)第二种方式(最佳方式绑定方式):
worker_processes auto;
worker_cpu_affinity auto;
(3)查看nginx worker进程绑定对应的cpu:
[root@slave-node1 ~]# ps -eo pid,args,psr|grep [n]ginx
6、nginx通用优化配置文件:
(1)配置文件:
[root@slave-node1 application]# cat nginx/conf/nginx.conf
user nginx;
# worker进程的数量
worker_processes auto;
# 绑定Nginx的worker进程到指定的CPU内核
worker_cpu_affinity auto;
error_log logs/error.log warn;
pid logs/nginx.pid;
# worker进程可以打开的最大句柄描述符个数
# 调整至1w以上,负荷较高建议2-3w以上
worker_rlimit_nofile 65535;
events {
use epoll;
# 每个worker进程的最大连接数
# worker_processes乘以worker_connections等于nginx总体最大连接数
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
# 统一使用utf-8字符集
charset utf-8;
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
# Core module
sendfile on;
# 静态资源服务器建议打开
tcp_nopush on;
# 动态资源服务建议打开,需要打开keepalived
tcp_nodelay on;
keepalive_timeout 65;
# Gzip module
gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
# Virtal Server
include conf.d/*.conf;
}
(2)创建配置文件目录:
[root@slave-node1 application]# mkdir -p nginx/conf/conf.d/
(3)测试 test.conf 文件:
[root@slave-node1 application]# vim nginx/conf/conf.d/test.conf
server {
listen 0.0.0.0:80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
(4)验证配置文件:
[root@slave-node1 application]# nginx/sbin/nginx -t
(5)重启nginx:
[root@slave-node1 application]# nginx/sbin/nginx -s reload
(6)访问:
http:172.16.1.91
22、编译安装nginx及性能优化的更多相关文章
- Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...
- Centos7 编译安装 Nginx Mariadb Asp.net Core2 (实测 笔记 Centos 7.3 + Openssl 1.1.0h + Mariadb 10.3.7 + Nginx 1.14.0 + Asp.net. Core 2 )
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...
- 源码编译安装nginx
安装依赖软件 1.安装编译工具gcc gcc是一个开源编译器集合,用于处理各种各样的语言:C.C++.Java.Ada等,在linux世界中是最通用的编译器,支持大量处理器:x86.AMD64.Pow ...
- 初识Nginx及编译安装Nginx
初识Nginx及编译安装Nginx 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...
- Nginx配置性能优化与压力测试webbench【转】
这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...
- CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached
声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux ...
- Ubuntu编译安装nginx,php,mysql
摘要: 整理的Ubuntu编译安装nginx,php,mysql的步骤,主要来自对驻云的sh-1.4.1中脚本的整理,随时代进步,内容中的软件或者命令请自行更新 目录准备 创建用户 userdel w ...
- Centos7 编译安装 Nginx、MariaDB、PHP
前言 本文主要大致介绍CentOS 7下编译安装Nginx.MariaDB.PHP.面向有Linux基础且爱好钻研的朋友.技艺不精,疏漏再所难免,还望指正. 环境简介: 系统: CentOS 7,最小 ...
- Windows 编译安装 nginx 服务器 + rtmp 模块
有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...
随机推荐
- redis分布式锁-spring boot aop+自定义注解实现分布式锁
接这这一篇redis分布式锁-java实现末尾,实现aop+自定义注解 实现分布式锁 1.为什么需要 声明式的分布式锁 编程式分布式锁每次实现都要单独实现,但业务量大功能复杂时,使用编程式分布式锁无疑 ...
- 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端
nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...
- jmeter 非GUI模式下传参
为什么要使用非GUI模式?--因为GUI模式下运行的时候消耗的内存比非GUI模式大,会使得压力测试的结果不准确. 根据参数类型分为两种:jmeter.properties和system.propert ...
- Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体
Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...
- mysql8 安装配置教程
第一步 下载安装包 MySQL 是甲骨文(Oracle)公司产品,可以到官网上下载 MySQL: 官网下载地址:https://dev.mysql.com/downloads/mysql/ 如果嫌弃官 ...
- 使用mybatis逆向工程Example类,(或者)or条件查询(Day_47)
使用Example类,or条件查询 SetmealExample setmealExample=new SetmealExample(); setmealExample.or().andNameLik ...
- JDK5.0新特性 (Day_07)
JDK5.0新特性 目录 静态导入 自动装箱/拆箱 for-each循环 可变参数 枚举 JDK 5.0 新特性简介 JDK 5.0 的一个重要主题就是通过新增一些特性来简化开发,这些特性包括 ...
- python工业互联网应用实战17—前后端分离模式之django template vs jquery3
上一章节我们完成了"CRUD"的后面3个功能点,新增由于改动较大我们专门增加本章来阐述,主要是完成技术栈切换后,会发现模板的代码判断过多,逻辑过于复杂.对未来存在的扩展和维护友好性 ...
- Cannot resolve class or package 'mysql’处理方法
在application.properties中配置mybatis_plus碰见报了这个错误 Cannot resolve class or package 'jdbc' 错误产生的原因 其实这个问题 ...
- Spring Cloud Alibaba(13)---Sleuth概述
Sleuth概述 前言 在微服务架构中,众多的微服务之间互相调用,如何清晰地记录服务的调用链路是一个需要解决的问题.同时,由于各种原因,跨进程的服务调用失败时,运维人员希望能够通过 查看日志和查看服务 ...