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. stressapptest测试用例testcase方法aarch64

    ### https://github.com/stressapptest/stressapptest aarch64 To build from source, the build/installat ...

  2. 变体 variety 计算机学科中的改变类型;输入法的 类型

    变体_百度百科 中文为改变原来的体式.或者计算机学科中的改变类型. 变体 variety 输入法的 类型

  3. 使用 yum-cron 自动更新 Linux系统

    使用 yum-cron 自动更新 Linux系统   Linux系统技术交流QQ群(1675603)验证问题答案:刘遄 我知道如何使用 yum 命令行 更新系统,但是我想用 cron 任务自动更新软件 ...

  4. nosql数据库之Redis集群

    Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 ...

  5. Linux进阶之seq,pidof,wget,curl,tr,grep命令

    本节内容 seq  pidof  wget  curl  tr  grep 1.seq(sequence) 生成数列 例子1:指定结束位置 [root@renyz ~]# seq 5 1 2 3 4 ...

  6. Hutool :一个小而全的 Java 工具类库

    Hutool 简介 Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的 ...

  7. STM32 中的HARDFAULT 的查找方法

    http://blog.csdn.net/zyboy2000/article/details/7668331

  8. Linux(CentOS7)下配置多个tomcat

    记录 Linux(CentOS7) 下配置多个 tomcat 的操作过程. 一.下载tomcat 前提:安装配置好jdk环境,未配置可参考Linux(CentOS7)下安装jdk1.8. 从 tomc ...

  9. python中的时间戳和格式化之间的转换

    import time #把格式化时间转换成时间戳 def str_to_timestamp(str_time=None, format='%Y-%m-%d %H:%M:%S'): if str_ti ...

  10. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...