Weakyon Blog

Weakyon

(nginx源码系列五)--nginx文件的内存缓存分析

nginx的文件缓存分为两种,内存缓存和硬盘缓存。 内存缓存指文件句柄等信息进行缓存,减少使用open等的系统调用。 硬盘缓存指文件被缓存到硬盘上,一般是因为当作反向代理用才会有这种需求。 内存缓存是全模块都可以调用的,因为封装在core/ngx_open_file_cache.c中。 而硬盘缓存只有http模块可以调用,因为封装在http/ngx_http_file_cache.c...

(nginx源码系列四)--nginx内存池分析

C的内存管理难已经成为了共识。记得我那时候写ydfs,第一次接触全异步编程这种模式,没有考虑到内存的统一管理,导致溢出泄漏问题层出不穷。最终搞定没BUG了,那代码的阅读质量也是让人不敢恭维。那么来看看nginx是怎么做的吧。 nginx的内存池分为池(pool)和块(block)两个概念 这是nginx使用到的内存结构 typedef struct ngx_pool_large_s ...

(nginx源码系列三)--nginx时间缓存分析

Why## nginx把整个时间的系统调用都封装了一遍。 其中有两个原因 1 不谈其他平台,至少在linux上,很多时间相关的系统调用不是async-signal-safe或thread-safe的。 例如local_time_r虽然是thread-safe的但不是async-signal-safe的,当然local_time两个都不是。 这里不是专门谈什么是async-sigan...

维护redis时的异常处理

现象一:## 昨天DBA反应线上存在某个redis slave 状态为down,反复重启无效 观察slave日志: 发现出现多次全同步,并且报出connect lost同步失败。 Master日志没有任何记录。 原因分析:### 根据netstat显示的slave未出现timewait状态,判断是master主动关闭了连接 而master只有在缓冲区达到限制(默认的参数cl...

(nginx源码系列二)--由读nginx源码想到的多进程下accept的处理方式

nginx的结构 stale event 多进程下accept的处理方式 nginx方式 ONESHOT方式 我的方式 小结 nginx源码本来应该放在nginx源码学习这一块。但是考虑到多进程下accept的处理可以单独拿出来讨论。所以还是单独一篇博客会比较好。 nginx的结构## 简单提一下nginx的启动流程 核心文件当然是c...

nginx模块开发的一些经验

fastdfs有nginx模块,在上面做一些缩略图缓存的功能。我当时总是觉得lua-nginx这种方式太重了,因此就入了nginx模块开发这个坑。 nginx模块开发的资料网上还是比较多的,《nginx模块开发与架构解析》这一本就不错,推荐入手实体书。我看PDF看的有点烦躁,因为很多东西要来回对照着看。 很多基础东西书里写的很细,就不谈了,就说说自己开发时候的过程和遇到的坑吧。 ngi...

Log Structured Merge Trees译文以及LSM调研心得

原文## 原文 直接看原文有些糊涂,所以翻译一下看,也为了和朋友分享一下。能力有限,所以翻译的会很蠢,求指点0.0 看完译文以后可以按照顺序浏览以下几篇博文。感觉讲的很透彻。 LSM树存储模型 LevelDB关键实现图解 数据分析与处理之二(Leveldb 实现原理) leveldb源码阅读分析笔记 看完这些就循序渐进大致对leveldb有个基础了解了。如果后面工作有需要,我...

(nginx源码系列一)--nginx源代码初步学习

nginx真是博大精深,最近写fastdfs的动态缩略图模块,刚好能有时间研究下,真是满心欢喜。 学习主要是靠两本书,其他的稍微搜搜也就能解惑了。 《Nginx模块开发与架构解析》这个我看的电子PDF 《Nginx开发从入门到精通》这个有网页版本的,挺好的: Nginx开发从入门到精通 nginx源代码初步学习(1)——–《Nginx模块开发与架构解析》的勘误 nginx源代...

android jni的坑

传统的jni方式是这个步骤 1.在java文件中定义native函数 2.使用javah 生成对应C函数定义并实现 3.编写Android.mk把C源码用ndk编译成动态库 4.在java中调入编译好的动态库 然而android下是不行的,android下的jni必须要有JNI_OnLoad函数 #define JNIREG_CLASS "com/hello/hellowo...

密码模块二三事

公司需要,需要对一些加解密模块做调研。 把一些参考资料贴出来 AES、DES、3DES算法的C语言实现 这个是内核中摘出的算法,不知道为什么特别慢,DES加解密一起只能到7M/S的数据处理 OpenSSL - DES openssl的des很快,加密解密一起能到28M/S的速度 #include <stdio.h> #include <openssl/des.h...