点击上方蓝色字体,选择“设为星标”

优质文章,及时送达

nginx buffer机制

buffer机制,请求缓冲区在nginx处理请求中起着重要作用,接收到请求时,nginx将其写入这些缓冲区,缓冲区数据可作为nginx变量使用。

如果缓冲区大小比请求大小小一些,则将数据存入磁盘文件上,因此将涉及IO操作。

对于来自于FastCGI Server的Response,Nginx将其缓冲到内存中,然后依次发送到客户端浏览器,缓冲区大小可以通过fastcgi_buffers和fastcgi_buffer_size配置。

Buffer size优化

buffer大小时需要调优的重要参数,如果buffer size太小会导致nginx使用文件存储response,会引起磁盘IO,流量越大问题越严重。

client_body_buffer_size处理客户端请求体buffer大小。用来处理post提交数据,上传文件等。client_body_buffer_size需要足够大以容纳需要上传的POST数据。

Fastcgi_buffers,proxy_buffers处理后端响应,如果这个buffer不够大,同样会引起磁盘IO。

共享内存

在linux中为了实现进程间通信方式,一般通过mmap或者shmget系统调用在内存中创建一块连续的线性地址空间,使用munmap或者shmdt系统调用可以释放这块内存。

使用共享内存的好处是:当多个进程使用同一块共享内存时,在任何一个进程中修改了共享内存内容,其他进程通过访问这段共享内存能够得到修改后的内容。

nginx是多进程的,有一些全局变量,nginx希望所有进程都可以共享这些变量,共享变量实现有几种方案:

1. mmap匿名映射

2. 尝试将mmap映射到/dev/zero上

3. 尝试使用共享内存shmget从内存中申请一个内存区域

4. 如果不支持原子操作,使用文件锁实现多进程环境下加锁

从性能考虑,优先使用mmap匿名映射。

nginx如何使用共享内存?

默认情况下,通过fork派生的子进程并不与其父进程共享内存区。但master和worker进程是父子进程,该怎么办呢?

解决方法就是mmap的flags参数,master进程在调用fork之前制定flags为MAP_SHARED来调用mmap,POSIX保证父进程中的内存映射关系时存留到子进程中,父进程对共享内存的所有修改都可以在子进程中看到,反过来也一样。

所以是:

master进程在内存中以MAP_SHARD方式开辟一块共享内存,并映射到自己进程地址空间中的共享内存区

master调用fork,派生出子进程,可以在其自己地址空间内继承这块共享内存区域,解决了问题

Nginx一点事儿(一)相关推荐

  1. 比ISA更简单的监管利器,谈谈关于公司上网监管的一点事儿

    前些日子,我给大龙看了一张图,告诉他我把服务器的终端许可改了,不用再被一次只能2个人登录所阻挡了. 他震惊了,到不是因为这许可证的数量.而是这台机器的名字是ISA. 然而事实上这台机器不过是挂羊头卖狗 ...

  2. Nginx那些事儿2

    负载均衡 当访问的服务具有多个实例时,需要根据某种"均衡"的策略决定请求发往哪个节点,这就是所谓的负载均衡,目的是为了将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高 ...

  3. 起步翻转课堂的一点事儿——对话实录

    有老师(T老师)与我(H老师)联系,询问些关于翻转课堂实施的事.实录如下,供同行参考.指正. [T老师] 贺老师,您好.我想问下您在实施翻转课堂教学时是否使用课前任务书? [H老师] 指导学生课前自主 ...

  4. 关于WiFi共享精灵正式版的一点事儿

    电脑安装软件都要问个官方正式版,知道并想使用WiFi共享精灵正式版的朋友就得注意了.百度软件中心.腾讯电脑管家还有WiFi共享精灵官网最新版都是正式版.至于其他顶着其头衔大摇大摆之流,就得分辨清楚了. ...

  5. 你应该知道的五种IO模型

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 写在前面 linux操作系统包含了五种IO模型,各种上层编程语言或者网络编程框架的上层实现都是基于操作系统的这些IO实现来实 ...

  6. [UIView beginAnimations:context:]与[UIView animateWithDuration:animations:]值得注意的一个区别...

    原文链接:http://longtimenoc.com/archives/uiview-beginanimationscontext%E4%B8%8Euiview-animatewithduratio ...

  7. [译]2019年修炼前端开发者之路

    原文链接The Path to Becoming a Front End Developer in 2019 一点儿我自己的铺垫 本文更多的是侧重前端入门方法,适用于那些踌躇不前无从下手的即将入门前端 ...

  8. 年轻人,拼命奋斗还是保命要紧?

    01.问题 IT行业的年轻人,996甚至007肯定都不陌生. 这个时代节奏太快了. 它要求我们每一个青年人和中年人甚至老年人都只能快.更快. 这样才能"活下去",才能"不 ...

  9. 台式计算机风扇声音大怎么处理,如何解决电脑电源风扇声音大的问题?

    现在的台式机一般用3到5年后,一些问题自然也就慢慢表现出来了.很多网友在使用电脑过程中都有电脑风扇声音大怎么办的问题,电脑风扇声音大就会让人觉得使用电脑很不舒服,怎么办好呢?出现重要的问题要如何解决好 ...

最新文章

  1. Android应用中通过AIDL机制实现进程间的通讯实例
  2. 聊聊wiki和中华维客
  3. 【PC工具】图片批量添加水印工具,绿色免安装工具软件,妈妈再也不用担心我.....
  4. Mabatis 源码探究(2)Java 获取mybatis-config.xml的输入流 inputStream对象
  5. 特征提取(Feature Detection)之——HOG (Histogram of Oriented Gradient)特征
  6. 名企程序员被裁实录:早上还在改 Bug,晚上就成下岗工
  7. aes解密算法 java_AES算法实现Java和JS互通加解密
  8. JAVA消息中间件面试题
  9. ABAP问题记录--->物料编码和序列号的相爱相杀
  10. Leetcode(java)
  11. 带你了解电机驱动板的四大分类
  12. 使用Vue+DataV+ECharts打造新冠肺炎疫情数据大屏(可动态刷新)
  13. 吉林大学计算机 林向,基于不同尺度的山西太岳山森林主导生态功能评价研究...
  14. nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符
  15. 通过深度学习评估公共开放空间的利用率:以底特律河岸开放空间研究为例
  16. 简述DDNS和DNS区别
  17. 拼多多店铺商品被下架了?凶手可能藏这儿!
  18. 第一章:基于Visual C++ 6.0使用运动控制卡控制电机转动实验操作指导
  19. ul 原点显示_li前面的原点或者方的样式修改html中列表项li所显示的圆点的颜色?,以及相关样式的设定...
  20. 【C++IO流】C++打印浮点数小数点后多少的方法,序列化

热门文章

  1. 春泥棒(偷春人) — ヨルシカ(MV + 歌词、汉译、罗马音)
  2. PHP上传文件缺省目录,帝国cms默认图片、附件上传路径/d/file/怎么修改
  3. 在内网中使用maven_搭建私有maven仓库并在项目中使用
  4. 计算机网络技术 选修 沪科版教案,沪科版《信息技术基础》必修 全册教案.doc...
  5. 使用JNA,让java调用原生代码
  6. 构建Docker镜像(三)
  7. GraphQL and Relay 浅析
  8. 软件安装:原始码与 Tarball
  9. ubuntu10.10---用Apache+mod_wsgi部署python程序
  10. 分享Silverlight/WPF/Windows Phone一周学习导读(1月17日-1月23日)