nginx-理解
文章平均质量分 88
linux_vae
本人除了技术还是技术,专攻linux,学习方向嵌入式。深入学习过linux内核代码。
展开
-
NGINX原理分析 之 SLAB分配机制 (转)
作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2013.09.15 23:19 转载请注明来自”祁峰”的CSDN博客初始化完成之后,整个内存结构布局就是这个样子滴(一目了然):1 引言众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下。SLAB是一种内存管理转载 2017-04-18 10:03:30 · 529 阅读 · 0 评论 -
常用套接字选项(SOL_SOCKET级别)
常用套接字选项(SOL_SOCKET级别)#include int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len); 第一个参数socket是套接字描述符。 第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把leve转载 2017-07-13 17:00:57 · 2198 阅读 · 0 评论 -
nginx监听套接口的设置
nginx监听套接口的设置 if (ls[i].listen) { /* change backlog via listen() */ //改变每个监听的数目 if (listen(ls[i].fd, ls[i].backlog) == -1) { //ls[i].fd 10, ls[i].backlog 511转载 2017-07-13 18:30:21 · 669 阅读 · 0 评论 -
Nginx内存对齐优化
Nginx内存对齐优化Nginx在内存使用方面做了较多优化,其中有一项就是内存对齐。内存对齐都有哪些好处?单从Nginx的代码来看,有两点:减少CPU访问内存次数,我们知道CPU都有一个叫做总线宽度的东西,我们平时所说的32位CPU,其实就是它的总线宽度是32位,也就是一次能读32/8=4个字节。假设有一块内存地址为0 1 2 3 4 5 6 7八个字节,CPU从该内存中读一个整数出来,如果该整数转载 2017-07-06 17:53:28 · 371 阅读 · 0 评论 -
nginx hash结构
nginx hash结构转载 2017-07-07 10:42:31 · 430 阅读 · 0 评论 -
nginx rtmp 包在wireshark中的体现
nginx rtmp 包在wireshark中的体现问题:今天在分析nginx发送rtmp包的时候,想通过wireshark抓包查看具体的信息。wireshark只能分析一整个video帧,不能分开解析rtmp包如图:图中第二个rtmp video包应该是I帧(第一个是sps),但是wireshark这里只合并成了一个包的信息,实际上:I帧应该分成N个rtmp包发送的。下面找到每个包的起点: ng原创 2017-08-16 17:28:14 · 1184 阅读 · 0 评论 -
srs之与nginx-rtmp性能对比
SRS(Simple Rtmp Server)单进程能支持9000并发,nginx-rtmp单进程最多支持3000个,单进程的性能SRS(Simple Rtmp Server)是nginx-rtmp的三倍。SRS(Simple Rtmp Server)单进程性能如何做到nginx-rtmp的三倍的?SRS(Simple Rtmp Server)哪几个结构极大提升了性能? 先来看看我们遇到的转载 2017-09-05 13:57:40 · 1769 阅读 · 0 评论 -
内存拷贝和对齐读取
一 memcpy的思考在很多的网络开发中,经常会碰到一些内存转换,如下面的场景:#define PACKAGE_PARSE_ERROR -1 #define PACKAGE_PARSE_OK 0 int parse_package( int* a, int* b, int* c, int* d, char* buf, int buf_len ) { if( !buf转载 2017-09-12 18:34:07 · 1405 阅读 · 0 评论 -
nginx-rtmp-hls 模块---大疆mavic推流hlx无法播放问题
分析过程消息流程: epoll_read callback() ngx_rtmp_recv (解析完rtmp chunkheader,得到ngx_rtmp_header_t (mlen,type,timestamp)) ngx_rtmp_receive_message (消息分发: cmcf->events[h->type]存着各模块的handler函数) ——ngx_rtmp_hls_v原创 2017-11-02 10:10:52 · 1766 阅读 · 0 评论 -
nginx http handler 过程
一直容易忘记的httphandle处理过程ngx_http_handler 起步voidngx_http_core_run_phases(ngx_http_request_t *r) //循环处理函数{ ngx_int_t rc; ngx_http_phase_handler_t *ph; ngx_http_core_main...原创 2019-02-18 17:40:24 · 278 阅读 · 0 评论 -
nginx rtmp 多进程使用init process注意的地方
在nginx_rtmp中添加一些功能,需要注意nginx的多进程特性,虽然最新版本的nginxrtmp 模块支持auto_push模块rtmp_auto_push on;rtmp_auto_push_reconnect 1s;rtmp_socket_dir /var/sock;例如我添加每个节点使用启动后调用其他服务器的http接口,上报节点信息,在init process ...原创 2019-03-12 15:59:40 · 819 阅读 · 0 评论 -
nginx中的锁与原子操作
nginx中的锁与原子操作问题引入多线程或者多进程程序访问同一个变量时,需要加锁才能实现变量的互斥访问,否则结果可能是无法预期的,即存在并发问题。解决并发问题通常有两种方案:1)加锁:访问变量之前加锁,只有加锁成功才能访问变量,访问变量之后需要释放锁;这种通常称为悲观锁,即认为每次变量访问都会导致并发问题,因此每次访问变量之前都加锁。2)原子操作:只要访问变量的操作是原子的,就不会导致并发...转载 2019-04-15 12:21:24 · 366 阅读 · 0 评论 -
nginx 代理和负载均衡
Configuring NGINX to accept the PROXY Protocol nginx作为tcp负载均衡 http { log_format combined '$proxy_protocol_addr - $remote_user [$time_local] ' '"$request" $status $body_by原创 2017-07-10 16:42:12 · 903 阅读 · 0 评论 -
nginx构建static location tree和查找
参考地址 : http://blog.chinaunix.net/uid-27767798-id-3759557.html nginx在处理location的配置的时候,用到了一种三叉排序树,加速了通过request的url和location的映射速度三叉排序树的形成过程:pclcf->static_locations = ngx_http_create_locations_tree(cf, lo原创 2017-04-27 17:32:21 · 690 阅读 · 0 评论 -
nginx 读取配置到conf_ctx流程
nginx配置读取从这个函数开始:ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle) //初始化一些参数{... if (ngx_conf_param(&conf) != NGX_CONF_OK) {//重启带着old_cycle时获取配置文件地址 environ = senv; ngx_destroy_c原创 2017-04-24 17:02:50 · 2494 阅读 · 0 评论 -
深入理解ngx_align_ptr宏及内存管理
http://blog.csdn.net/cywosp/article/details/7044288nginx 内存池的内存地址对齐和长度按照2的幂取整内存池的里面返回的地址,都是经过对齐处理的,这样使用这个对齐的地址比如做memcpy的时候,不用跨cache line 性能更好吧。 又学了一招。 关于cache line : 如下代码 第一段总是比第二段快,因为cache 的存在转载 2017-04-18 11:10:14 · 423 阅读 · 0 评论 -
Nginx slab的实现 --- 第一篇“基本布局”
Nginx slab 用于进程间的共享内存转自 https://my.oschina.net/u/2310891/blog/672539 说明:本系列的文章基于Nginx-1.5.0版本代码。 Nginx slab分配器用于管理和分配小于一页的内存申请,但实际上大于一页的内存分配也是统一实现的, 具体代码在core/ngx_slab.c文件中,对应的头文件是core/ngx_slab.转载 2017-04-18 17:40:42 · 978 阅读 · 0 评论 -
Nginx slab的实现 --- 第二篇“基于页的内存分配”
摘要: 本篇在上一篇“基本布局”的基础上介绍“基于页的内存分配”机制,也为后续讲解“基于块的内存分配”机制做个铺垫。 说明:本系列的文章基于Nginx-1.5.0版本代码。在上一篇中已经介绍了Nginx slab分配器的基本原理和内存空间布局,现在我们将在此基础上引入“基于页的内存分配”的相关内容。之所以这样安排是因为它的实现相对于“基于块的内存分配”要简单许多,同时它又是“基于块的内存分配”的基转载 2017-04-18 17:47:12 · 729 阅读 · 0 评论 -
Nginx slab的实现 --- 第三篇“基于块的内存分配”
说明:本系列的文章基于Nginx-1.5.0版本代码。在“基本布局”一篇中我们曾经介绍过,ngx_slab.c的实现中将内存的分配分为了两个大类,除了上一篇讲的“基于页的内存分配”外,另一类就是本篇中要介绍的“基于块的内存分配”了。 为了能够满足对小块内存的申请需求,Nginx slab分配器将页划分为更小的块(chunk),并引入了“slot分级内存管理数组”来与“page页内存管理数转载 2017-04-18 18:05:41 · 850 阅读 · 0 评论 -
Nginx slab的实现 --- 第四篇“基于块的内存释放”
说明:本系列的文章基于Nginx-1.5.0版本代码。本篇开始将涉及到Nginx slab内存管理中与内存释放相关的内容,紧跟上一篇的步伐,趁热打铁,就从“基于块的内存释放”开始吧。 开门见源码:voidngx_slab_free(ngx_slab_pool_t *pool, void *p){ ngx_shmtx_lock(&pool->mutex); ngx_sla转载 2017-04-18 18:18:30 · 1223 阅读 · 0 评论 -
Nginx slab的实现 --- 第五篇“基于页的内存释放”
说明:本系列的文章基于Nginx-1.5.0版本代码。在上一篇”基于块的内存释放“中,我们已经见过一个函数:static voidngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page, ngx_uint_t pages);单从名字应该就已经能够猜到这个函数的作用了,没错,就是本篇的主题 — ”基于页的内存释放“,当释放的转载 2017-04-18 18:22:45 · 522 阅读 · 0 评论 -
nginx源码分析—处理继承的sockets
Content序侦听结构ngx_add_inherited_sockets()分析ngx_set_inherited_sockets()分析小结1.序源代码://通过环境变量NGINX完成socket的继承,继承来的socket将会放到init_cycle的listening数组中。//在NGINX环境变量中,每个socket中间用冒号或分号隔开。完成继承同时设置全局变量ngx_inh转载 2017-04-19 10:55:01 · 507 阅读 · 0 评论 -
nginx源码分析—信号初始化和使用
序ngx_init_signals()函数 ngx_signal_t结构signals数组sigaction结构ngx_signal_handler()函数ngx_master_process_cycle()数小结1序 本文主要分析nginx信号初始化及其处理,信号处理用于master进程的接收reload,stop等操作。2.1 ngx_init_signals()函数ngx_i原创 2017-04-19 16:44:45 · 632 阅读 · 0 评论 -
nginx-多进程启动和通信
nginx-多进程启动和通信先上图:主进程:主要处理信号来控制nginx的启动和停止 子进程:依靠主进程的socket进程间通信来控制子进程的退出等原创 2017-04-20 18:32:23 · 574 阅读 · 0 评论 -
Nginx HTTP请求流程
Nginx HTTP请求流程,有需要的朋友可以参考下。| – ngx_single_process_cycle##| | – ngx_process_events_and_timers | | | – ngx_event_find_timer | | | – ngx_epoll_process_events //ngx_process_events转载 2017-05-12 14:32:47 · 379 阅读 · 0 评论 -
nginx 代码分析listen 和request请求的流程
listen 针对于server的端口进行监听,server的配置可以比较复杂如:server { listen 192.168.8.81:80; server_name vae.test1.com *.test1.com;<!--hosts文件配置的地址--> index index.html; location /te原创 2017-04-28 15:05:30 · 1218 阅读 · 0 评论 -
查看模块的conf
p (ngx_rtmp_access_app_conf_t)(((ngx_rtmp_core_app_conf_t)(((ngx_rtmp_core_srv_conf_t)ngx_rtmp_core_main_conf->servers->elts))->applications->elts))->app_conf[ngx_rtmp_access_module.ctx...原创 2019-08-14 18:48:47 · 290 阅读 · 0 评论