120 Linux C++ 通讯架构实战 nginx整体结构,nginx进程模型,nginx调整worker进程数量,nginx重载配置文件,热升级,关闭

一 nginx整体结构

1.1 master进程和worker进程概览(父子关系)

启动nginx,看到了master进程和 worker 进程。

ps -ef | grep nginx

第一列:进程所属的用户id

第二列:进程ID,也叫做PID,用来唯一的标识一个进程

第三列:父进程ID(PPID)。这说明 work process 是 master process的孩子。

hunandede@hunandede-virtual-machine:~/nginx/nginx-1.14.2$ ps -ef | grep nginx
root          14539      1       0 16:09 ?        00:00:00 nginx: master process ./nginx
nobody    14540  14539   0 16:09 ?        00:00:00 nginx: worker process
 

1.2 nginx进程模型

1个master进程,1到多个worker进程,这种工作机制来对外服务的,这种工作机制保证了nginx能够稳定,灵活的运行。

master进程的责任是 监控进程,不处理具体业务,抓们用来管理和监控worker进程,master角色是监工,比较清闲。

worker进程是主要干活的。 (和用户交互)

master 进程和worker 进程之间如何通讯呢?可以用信号,也可以用共享内存

worker进程一旦挂掉,那么master进程会立即fork()一个新的workser进程投入到工作中去。

1.3 调整worker进程数量

worker进程有几个比较合适呢?一个公认的做法是:你是几核的计算机,就产生几个worker,这样做的目的是:让每个worker 运行在一个单独的内核上。最大限度减少CPU进程切换成本;

那么怎么知道我们有多个个核呢?

使用 grep -c processor /proc/cpuinfo

结果是4,也就是本机linux上是4个核心

注意的是 CPU和核是两个不同的概念,一个CPU 可能含有多个核。

在前面的课程中,我们知道,/usr/local/nginx/conf/nginx.conf文件是很重要的,这个配置文件决定了我们启动的一些参数,这个worker 数量的配置也是在这里的,因此我们要改动这个文件中的

work_processes 的值为 当前processor的值,也就是4.

cd /usr/local/nginx/conf

sudo vim nginx.conf

二 nginx进程模型细说

2.1nginx重载配置文件

假设我们改动了,

cd /usr/local/nginx/conf/nginx.conf

sudo vim nginx.conf

可以使用 ./nginx -s reload 让其重新加载这些配置文件

使用 ./nginx -?查看 nginx支持哪些命令参数。

改动之前 ps- ef | grep nginx

改动之后,使用 sudo ./nginx -s reload重新加载配置文件


sudo ./nginx -s reload

注意 worker process 的进程ID,也就是PID 都变化了,但是 master的pid没有变化还是1402

2.2nginx 热升级, 还能热回滚

不关闭 nginx的情况下,升级,如果升级后有问题,还能回滚。这个不是重点,我们知道有这个功能就行了。

2.3nginx的关闭

./nginx -s stop  暴力关闭,不管这时候有没有人在使用。

./nginx -s quit 正常关闭,如果这时候有user在使用,会等到这次连接结束后,关闭

三 总结

nginx 是一个多进程服务器,

好处是:A worker 进程挂了,不会影响其他进程,master进程发现A挂了后,会重新启动一个进程。

弊端是:进程间通讯消耗的资源多。

有些服务器是多线程服务器,多线程的弊端是当一个线程挂了的时候,很可能影响其他的线程,到时整个进程都有问题。

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

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

相关文章

Unity中关于群组的一些组件

前言 在游戏开发环境中,UI组件是构建玩家交互界面的基础。以下是一些常见UI组件的详细解释和它们适用的场景,方便我们更好地理解和使用这些工具。 1. Graphic Raycaster Graphic Raycaster组件是游戏UI交互的核心。在Unity等游戏引擎中,当玩…

@arco.design Modal renderContent 增加样式

方式一&#xff1a;通过 h 函数 import { h } from vueMessage.error({content: () > {return h(div, {}, [手机号 , h(span, { style: { color: red } }, staffPhone), 已存在])}, })方式二&#xff1a;通过 jsx 方式 注意&#xff1a;lang 需要改为 jsx 或者 tsx <s…

JS面向对象:八.原型链的问题

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>原型链的问题</title> </head> <body> <script>function Humans(){this.clothing["trousers","dress",&…

OSQP文档学习

OSQP官方文档 1 QSQP简介 OSQP求解形式为的凸二次规划&#xff1a; x ∈ R n x∈R^n x∈Rn&#xff1a;优化变量 P ∈ S n P∈S^n_ P∈Sn​&#xff1a;半正定矩阵 特征 &#xff08;1&#xff09;高效&#xff1a;使用了一种自定义的基于ADMM的一阶方法&#xff0c;只需…

java当日时间段获取

需求&#xff1a;获取当天日期到当前访问的时间段&#xff0c;如当日是2024-02-19&#xff0c;那么此刻访问&#xff0c;日期期间就是2024-02-19 00:00:00到2024-02-19 16:58:00 代码如下&#xff1a; Date datenew Date();String currentDatedate2Str(date,"yyyy-MM-dd&q…

关于Sora的一些紧迫问题...

OpenAI Sora 概述 OpenAI最新的创新&#xff0c;Sora&#xff0c;在人工智能领域开辟了新的天地。Sora是一个文本到视频的扩散模型&#xff0c;可以将文本描述转化为逼真的视频内容。它解决了一个重大的技术挑战&#xff0c;即在视频中保持主体的一致性&#xff0c;即使它们暂…

Java 线程池的基本操作

Java 线程池的基本操作 package com.zhong.thread.threadpool;import java.util.concurrent.*;/*** ClassName : ThreadPool* Description : 线程池的基本操作* Author : zhx* Date: 2024-02-19 18:03*/ public class ThreadPool {public static void main(String[] args) {// …

C语言每日一题(59)左叶子之和

题目链接 力扣网404 左叶子之和 题目描述 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 2…

基于SpringBoot的高校竞赛管理系统

基于SpringBoot的高校竞赛管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 个人中心 管理员界面 老师界面 摘要 高校竞赛管理系统是为了有效管理学校…

低代码开发与网络信息安全:构建高效防护体系

随着数字化转型的加速&#xff0c;越来越多的企业开始关注低代码开发平台&#xff0c;以提高软件开发效率&#xff0c;缩短上市时间。然而&#xff0c;随之而来的网络信息安全问题也日益严峻。如何在享受低代码开发带来的便捷与高效的同时&#xff0c;确保网络信息安全成为企业…

K8s进阶之路-命名空间级-服务发现 :

服务发现&#xff1a; Service&#xff08;东西流量&#xff09;&#xff1a;集群内网络通信、负载均衡&#xff08;四层负载&#xff09;内部跨节点&#xff0c;节点与节点之间的通信&#xff0c;以及pod与pod之间的通信&#xff0c;用Service暴露端口即可实现 Ingress&#…

Vscode python pyside6 制作视频播放器

一、界面如下 包含控件 qcombox、qtablewidget、qpushbotton、qverticalslider 二、运行代码 media_player.py import sysfrom PySide6 import QtWidgets from PySide6.QtWidgets import * from PySide6.QtMultimedia import * from PySide6.QtMultimediaWidgets import QVi…

林浩然与杨凌芸的Java List大冒险

林浩然与杨凌芸的Java List大冒险 Lin Haoran and Yang Lingyun’s Java List Adventure 在一个阳光明媚的日子&#xff0c;程序员界的“侠客”林浩然和他那聪明伶俐的同事兼好友杨凌芸正在Java王国里进行一场别开生面的大冒险。这次他们的目标是征服两个强大的List家族成员——…

c++面试

c基础 面试题 1&#xff1a;变量的声明和定义有什么区别 1.定义:为变量分配地址和存储空间&#xff0c;声明:不分配地址。 2.一个变量可以在多个地方声明&#xff0c;但是只在一个地方定义。 3.加入 extern 修饰的是变量的声明&#xff0c;说明此变量将在文件以外或在文件后…

备战蓝桥杯 Day4

目录 注意&#xff1a;递推开long long 1140&#xff1a;验证子串 1131&#xff1a;基因相关性 1176&#xff1a;谁考了第k名 1177&#xff1a;奇数单增序列 1180&#xff1a;分数线划定 1184&#xff1a;明明的随机数 1185&#xff1a;单词排序 1186&#xff1a;出现…

图论之dfs与bfs的练习

dfs--深度优选搜索 bfs--广度优先搜索 迷宫问题--dfs 问题&#xff1a; 给定一个n*m的二维迷宫数组其中S是起点&#xff0c;T是终点&#xff0c;*是墙壁&#xff08;无法通过&#xff09;&#xff0c; .是道路 问从起点S出发沿着上下左右四个方向走&#xff0c;能否走到T点&a…

视频监控需求八问:视频智能分析/视频汇聚平台EasyCVR有何特性?

最近TSINGSEE青犀视频在与业内伙伴进行项目合作的过程中&#xff0c;针对安防监控可视化视频管理系统EasyCVR视频融合平台在电信运营商项目中的应用&#xff0c;进行了多方面的项目需求沟通。今天我们就该项目沟通为案例&#xff0c;来具体了解一下用户关心度较高的关于视频智能…

4.函数模板的局限性

函数模板的通用性并不是万能的&#xff0c;我们自己人为定义的新的数据类型&#xff0c;模板不一定总能进行正确的识别与操作。 为了解决这个问题&#xff0c;我们可以利用具体化的模板&#xff0c;解决自定义类型的通用化。 #include<iostream> using namespace std;…

MySql报错:Statement violates GTID consistency: CREATE TABLE ... SELECT.解决

一 解决Statement violates GTID consistency: CREATE TABLE ... SELECT 问题&#xff1a; mysql在备份表时报错Statement violates GTID consistency: CREATE TABLE ... SELECT. CREATE TABLE tmp_fix0219 AS SELECT trade_no,ctime FROM charge_data_log 执行后&#xf…

【Linux】单机可建立的最大TCP连接数

【Linux】单机可建立的最大TCP连接数 背景介绍环境客户端服务端总结 背景 本文内容大多基于网上其他参考文章及资料整理后所得&#xff0c;并非原创&#xff0c;目的是为了需要时方便查看。 介绍 本文介绍Linux单机作为客户端或服务端时可建立的最大TCP连接数。 环境 分类…