• 1.1 nginx整体结构、进程模型


    1、进程模型

    在这里插入图片描述

    1个master模型,1个或多个worker进程,这种工作机制能够稳定,灵活的运行,master进程主要监视进程, 不处理具体业务,专门用来管理监控worker进程工作,master和work通信使用共享内存和信号,

    2、调整work进程数量

    多少个worker进程合适?多核计算机,就让每个worker跑在一个单核上,最大程度减少cpu进程切换成本,提高系统效率

    // 查看processor数量
    grep -c processor /proc/cpuinfo
    
    // 通过修改虚拟机将processor数量修改成4
    
    // 修改nginx配置文件将,worker线程修改成4
    cd /usr/local/nginx/conf
    vim nginx.conf
    
    // 查看nginx进程
    ps -ef | grep nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3、nginx启动参数说明
    在这里插入图片描述

    // 不停机,重新加载配置文件
    ./nginx -s reload	
    
    // 关闭nginx
    ./nginx -s stop	// 粗暴退出
    ./nginx -s quit	// 优雅退出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、strace工具使用

    1、vm虚拟机共享目录消失解决
    在这里插入图片描述

    // 自定义查看进程显示方式
    ps -eo pid,ppid,sid,tty,pgrp,comm, | grep -E 'bash|PID|nginx'
    
    
    • 1
    • 2
    • 3

    2、strace工具使用

    linux系统调试工具,可以跟踪进程的系统调用,以及接收到的信号

    在这里插入图片描述
    在这里插入图片描述

    // 现在分别监控bash这个窗口进程,和这个bash下运行的nginx,然后关闭这个bash
    strace -e trace=signal -p 29517
    strace -e trace=signal -p 28998
    
    可以看到,先发送信号SIGHUP这个信号给,-29517的绝对值所在进程组,所以nginx这个程序就收到了这个信号
    这个bash先发生SIGHUP这个信号给同一个session里面的所有进程,然后发给自己
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3、bash关闭让进程不退出

    设想:
    1、nginx进程拦截SIGHUP信号,
    2、nginx进程和bash不在同一个session里(需要创建一个新的session id,进程组组长不能调用setsid)
    3、通过setsid ./nginx启动程序,他的父进程是1老祖宗进程
    4、nohup(no hang up不要挂断)用该命令启动进程跟上面忽略SIGHUP信号一样,该命令会将输出重定向当前目录的nohup.out下

    在这里插入图片描述
    在这里插入图片描述

    1、设想1实现
    // 在代码中加入此行代码,忽略这个信号,不做处理
    signal(SIGHUP,SIG_IGN);
    
    2、设想2实现
    #include 
    #include 
    #include 
    
    int main()
    {
        pid_t pid = fork();
        if(pid==0)
        {
            setsid();
            while(true)
            {
                printf("hello world\n");
                sleep(1);
            }
        }
        else
        {
            printf("父进程\n");
            while(1) sleep(1);
        }
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

  • 相关阅读:
    guava工具类常用方法
    基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统
    GLSL (3)输入和输出
    ESP8266-Arduino编程实例-CJMCU-1010(基于AT42QT101x)电容触控模块驱动
    Java笔记:垃圾回收
    ECharts数据可视化项目
    Java面试必问之面向对象“多态”
    Android音乐播放器(三)轮播图
    从零玩转系列之微信支付实战PC端接口搭建
    【深度学习环境】windows平台
  • 原文地址:https://blog.csdn.net/weixin_45715405/article/details/126922536