• 回家
    2018-11-18
    老师好,为什么看NGINX进程的时候能看到cache manager进程,看不到cache loader进程呢?还有在我的环境里ps -ef的时候,甚至cache manager 进程都看不到,这是什么原因呢?

    作者回复: 看不到cache manager进程是因为没有配置相关指令,打开nginx的cache功能,第4部分介绍反向代理时会介绍缓存功能的指令。而cache loader进程仅在cache打开时才会有,而且存在时间非常短,它是用于将之前nginx产生的cache信息元数据读入内存中的,读取完成后就会退出。

    
     3
  • 牛牛
    2019-03-09
    老师,nginx中worker进程和cpu的亲和性绑定,是本身就开启的吗?如果不是,那又是如何配置呢?或者还是说,workers =cpu核数时,就会自动开启呢?

    作者回复: 参见第121,122课

    
     1
  • 轨迹
    2019-01-11
    老师,请教一个问题,往有空回答一下。
    大概的场景如下:
    1、在windows环境,使用openresty搭建一个图片服务器。由于图片的数据是在云存储上面,也就是需要通过sdk采用才能访问到图片数据。
    所以流程如下:openresty访问lua,lua通过ffi访问dll库。通过dll这个库获取到图片数据。另外一个服务需要不断的访问图片,用来做图片数据分析。
    2、不做负载均衡的时候,速度有点达不到要求。于是乎对本机做了“负载均衡”。
    重点的配置如下:
        upstream homebackend
        {
            server 127.0.0.1:8600;
            server 127.0.0.1:8601;
            server 127.0.0.1:8602;
            server 127.0.0.1:8603;
            server 127.0.0.1:8604;
            server 127.0.0.1:8605;
            server 127.0.0.1:8606;
            server 127.0.0.1:8607;
            server 127.0.0.1:8608;
            server 127.0.0.1:8609;
        }
        
        server {
            #真正的访问入口
            listen 8081;
            server_name localhost;

            location / {
                proxy_pass http://homebackend;
                proxy_set_header Host $host;
            }
        }
        
        server {
            listen 8600;
            server_name localhost;

            location / {
                content_by_lua_file pic_dll.lua;
            }
        }
        
        server {
            listen 8601;
            server_name localhost;

            location / {
                content_by_lua_file pic_dll.lua;
            }
        }
        
        ...很多个不同端口的server
    问题:
    发现的结果是:采用本地的“负载均衡”速度竟然提高了好多倍。这是为什么呢?
    如果nginx基于进程和事件模型,多个server并没有增加进程或者是事件的处理能力,为什么能够提供性能呢?谢谢!
    展开

    作者回复: 我猜测你那个dll库的API方法是阻塞的,会导致大量的进程间切换,用多线程可以缓解。有两个办法验证:1、第5部分有一节课是介绍googleperftool的,你可以使用它生成一张调用耗时图。2、第5部分还有一节课介绍观察Nginx的进程间切换,例如pidstat,观察是不是有大量的主动进程切换。Nginx在繁忙的时候不应该有主动进程切换的。

    
     1
  • ybduan
    2018-11-23
    你好,对于有多少个cpu就启用多少个worker有点疑问。如果二者数量相等的话,那master进程运行在哪个cpu上呢?是否cpu还是要进行进程间的切换?

    作者回复: master进程不消耗cpu。进程间切换一直存在,因为操作系统上除nginx外还有很多进程。

    
     1
  • 卡卡
    2018-11-16
    各个work进程都是通过共享缓存来通信,nginx缓存是一个哪个进程管理?从操作系统的角度,进程之间是不能共享内存的。

    作者回复: 共享缓存?没明白。worker进程是通过共享内存来通讯的,比如upstream中的zone,或者limit_req、limit_conn中的zone等。操作系统提供了共享内存机制,你可以看下mmap这个函数。

    
     1
  • 路慢
    2019-03-09
    nginx :解释了为什么使用多进程而不是多线程。谢谢
    
    
我们在线,来聊聊吧