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及性能优化的更多相关文章

  1. 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 查看硬 ...

  2. 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 查看硬 ...

  3. 源码编译安装nginx

    安装依赖软件 1.安装编译工具gcc gcc是一个开源编译器集合,用于处理各种各样的语言:C.C++.Java.Ada等,在linux世界中是最通用的编译器,支持大量处理器:x86.AMD64.Pow ...

  4. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  5. Nginx配置性能优化与压力测试webbench【转】

    这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...

  6. CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached

    声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux ...

  7. Ubuntu编译安装nginx,php,mysql

    摘要: 整理的Ubuntu编译安装nginx,php,mysql的步骤,主要来自对驻云的sh-1.4.1中脚本的整理,随时代进步,内容中的软件或者命令请自行更新 目录准备 创建用户 userdel w ...

  8. Centos7 编译安装 Nginx、MariaDB、PHP

    前言 本文主要大致介绍CentOS 7下编译安装Nginx.MariaDB.PHP.面向有Linux基础且爱好钻研的朋友.技艺不精,疏漏再所难免,还望指正. 环境简介: 系统: CentOS 7,最小 ...

  9. Windows 编译安装 nginx 服务器 + rtmp 模块

    有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...

随机推荐

  1. redis分布式锁-spring boot aop+自定义注解实现分布式锁

    接这这一篇redis分布式锁-java实现末尾,实现aop+自定义注解 实现分布式锁 1.为什么需要 声明式的分布式锁 编程式分布式锁每次实现都要单独实现,但业务量大功能复杂时,使用编程式分布式锁无疑 ...

  2. 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端

    nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...

  3. jmeter 非GUI模式下传参

    为什么要使用非GUI模式?--因为GUI模式下运行的时候消耗的内存比非GUI模式大,会使得压力测试的结果不准确. 根据参数类型分为两种:jmeter.properties和system.propert ...

  4. Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体

    Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...

  5. mysql8 安装配置教程

    第一步 下载安装包 MySQL 是甲骨文(Oracle)公司产品,可以到官网上下载 MySQL: 官网下载地址:https://dev.mysql.com/downloads/mysql/ 如果嫌弃官 ...

  6. 使用mybatis逆向工程Example类,(或者)or条件查询(Day_47)

    使用Example类,or条件查询 SetmealExample setmealExample=new SetmealExample(); setmealExample.or().andNameLik ...

  7. JDK5.0新特性 (Day_07)

      JDK5.0新特性   目录 静态导入 自动装箱/拆箱 for-each循环 可变参数 枚举 JDK 5.0 新特性简介 JDK 5.0 的一个重要主题就是通过新增一些特性来简化开发,这些特性包括 ...

  8. python工业互联网应用实战17—前后端分离模式之django template vs jquery3

    上一章节我们完成了"CRUD"的后面3个功能点,新增由于改动较大我们专门增加本章来阐述,主要是完成技术栈切换后,会发现模板的代码判断过多,逻辑过于复杂.对未来存在的扩展和维护友好性 ...

  9. Cannot resolve class or package 'mysql’处理方法

    在application.properties中配置mybatis_plus碰见报了这个错误 Cannot resolve class or package 'jdbc' 错误产生的原因 其实这个问题 ...

  10. Spring Cloud Alibaba(13)---Sleuth概述

    Sleuth概述 前言 在微服务架构中,众多的微服务之间互相调用,如何清晰地记录服务的调用链路是一个需要解决的问题.同时,由于各种原因,跨进程的服务调用失败时,运维人员希望能够通过 查看日志和查看服务 ...