准确认识系统负载
linux系统有个uptime命令可以显示系统当前时间、系统已运行时间、登陆用户数以及系统平均负载,输出如下所示: rongchangyu:~$ uptime 16:08:28 up 385 days, 2:47, 2 users, load average: 0.59, 0.58, 0.51 load average后的数值就是系统负载,在公司实际生产环境中,load avera...
linux系统有个uptime命令可以显示系统当前时间、系统已运行时间、登陆用户数以及系统平均负载,输出如下所示: rongchangyu:~$ uptime 16:08:28 up 385 days, 2:47, 2 users, load average: 0.59, 0.58, 0.51 load average后的数值就是系统负载,在公司实际生产环境中,load avera...
进程是计算机科学中最深刻、最成功的抽象概念之一,进程是运行中的一个程序示例,作为计算机运行的主体,理解并把控进程的状态可谓是至关重要。 从用户的角度来看,运行一个程序之后,可以认为进程的状态大致可以分为运行中、挂起两大类,而导致被挂起的原因又可分为多种: 被动挂起:进程需要等待某种资源被内核挂起(如磁盘IO、网络IO、阻塞锁)。 主动挂起:用户通过系统调用sleep挂起一定时间、...
nginx官方http模块下有一个ngx_http_slice_filter_module模块,作用是将一个大文件请求分片成一个一个小的HTTP range请求,有利于提升缓存效果以及控制流量/内存,是个非常常用的模块,模块代码非常简洁,这篇博客对slice模块做一个简单的源码解析。 使用 模块只定义了一个配置指令slice和一个变量slice_range,模块指令slice定义了切片的大...
待完成…
这篇博客目的是对HTTP、HTTPS、TLS/SSL这几个网络协议的概念和版本做一个梳理,包括各个协议之间的关联,比如HTTPS是协议吗?有版本之分吗?HTTP2一定建立在TLS之上吗?HTTP2对TLS版本有要求吗?HTTP3可以不使用TLS吗?HTTP3对TLS版本有要求吗? HTTP/HTTPS协议 HTTP/0.9 HTTP协议起源于1990年的万维网项目(World Wide W...
这篇文章讨论下OpenResty框架下编码时,主要指access/set/rewrite/content_by_lua_*上下文中Lua变量的使用、作用域或者说可见性。 OpenResty使用的是LuaJIT,语法上兼容Lua5.1,对Lua之后版本的语言特性和修改不一定支持,因此这篇文章的讨论也是在LuaJIT2.1以及Lua5.1的背景下。 Lua中的全局变量 在通过Lua虚拟机单独...
ngx.ctx使用 Nginx将一个请求的处理过程划分为多个阶段,OpenResty在Nginx核心的基础上嵌入Lua,从而使得用户可以在不同阶段自由编写Lua代码实现各种功能逻辑。在OpenResty框架Lua编程中,经常需要跨越不同请求阶段、以请求的维度保存Lua变量。
OpenResty中提供的定时器接口ngx.timer,底层是创建了一个协程,可以异步并发的处理一些业务,在一些请求网络资源的场景下,可以利用并发来达到加速的效果。 协程特点 Lua是一个极其精简、高性能的脚本语言。它的协程是非抢占式的,不像golang中协程的调度模型(多线程抢占式),只有当前协程主动放弃执行权(yield),其他协程才有机会得到执行(consume)。OpenResty...
在第一篇博客记录了Unix Domain Socket的使用以及遇到的问题,文章的最后遗留了一个问题:使用UDP模式下,当操作系统内存处于较低水准时,send发送大块内存经常失败,返回错误:no buffer space available。除此之外,最近在线上服务器的高峰期,偶尔有记录到kswapd0/1这两个内核进程长时间运行,占用了相当一部分CPU和磁盘资源。 很显然,上面这两个问题...
开启第一篇关于OpenResty的记录,关于Openresty的介绍及入门见这里:OpenRest最佳实践。 前置知识 1.事件驱动架构(Event-driven architecture) 事件驱动架构是一种优秀的软件(系统)设计模式,以事件为核心驱动整个系统的运转。事件驱动架构通常包括事件分发者、生产者、消费者。事件消费者在事件分发者注册自己感兴趣的事件,生产者产生事件给分发者...