zhuizhuhaomeng Blog

「记录下来,一切都会更容易理解」

How to compile opencc

序列文章 怎么编译 OpenResty 怎么编译 OpenCC 更新 cmake 如果机器上的 cmake 比较老,需要更新 cmake,那么最快的方式就是使用已经编译好的包。 1 2 wget https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-x86_64.sh bash cm...

How to compile nginx dynamic module

社区有人反馈说把 lua-nginx-module 模块编译成动态模块后,在加载模块的时候失败了。报错信息是: unknown directive "lua_ssl_trusted_certificate" in /etc/nginx/conf.d/crowdsec_nginx.conf。 具体的问题可以参考 lua-nginx-module/issues/2180。 为什么会造成编译的模...

LuaJIT 字节码学习

两个立即数相加 lua 代码 1 2 3 4 1 local c 2 3 c = 1 + 2 4 print(c) luajit 字节码 1 2 3 4 5 6 7 8 9 $ luajit -bL t.lua:w -- BYTECODE -- t.lua:0-5 KGC 0 "print" 0001 [1] KPRI 0 0 ; s...

KVM manage

Shut down all vms Every day I need to shut down all the virtual machines, which is a lot of work. The script below is used to shut down all the running machines. 1 2 3 4 5 6 7 8 9 10 11 12 13 14...

使用 jemalloc 检测内存问题

Jemalloc 虽然也可以用来检测内存重复释放,访问后还使用的问题,不够如果 AddressSanitizer 和 Valgrind 可以使用的情况下,还是应该优先使用他们两个。 Jemalloc 检测内存问题 首先我们要确保编译的 jemalloc 是带有 –enable-debug 选项的。 其次,运行的时候应该加上 MALLOC_CONF=tcache:false 选项...

给 nginx 开启 TCP Fast Open 的支持

什么是 TCP Fast Open TCP 握手需要一个完整的 RTT(往返时间)。RTT 是指一个数据包从发送方到达接收方再返回所需的时间。 对于 “短暂的 “和 “时间敏感的 “流量来说,一个 RTT 是一个很大的时间,例如网络流量;在浏览器上浏览网页,如访问一个网站。如果传播延迟非常高(例如,地面站和卫星之间的链接)或移动网络非常慢,则性能会进一步下降。一个 RTT 不会(显著)降低...

给 TLS 添加扩展头部

TLS 协议本身已经定义了很多标准的扩展头字段,同事它允许用户添加自定义的扩展头字段, 这就给我们增加新的功能添加了无限的想象空间。 比如我们需要在 SSL 握手完成之前做一些动作,那么我们可以给 Client Hello 这个扩展头添加 一个扩展字段来实现我们的目的。因为这个字段是明文,因此我们不能在这里传输明文的敏感信息。 比如下图中的红框部分就是一些扩展头 那么我们如何添加扩...

astyle 格式化 C 代码

为什么使用 astyle 我们公司对代码风格要求非常的严格,要求严格准寻 nginx style,以至于在这里浪费了非常多的时间。 到现在,即使是 GPTCHAT,也没有办法重构代码,给函数取一个合适的名称。 但是代码的缩进和换行能够让工具来做已经是非常现实和常规的操作。 这里给出 astyle 的配置,让代码基本遵循 nginx style 的风格,但是结果仍然需要手工调整。 比如,函...

使用 jemalloc 的 prof_leak 功能分析内存泄漏

内存泄漏的问题 一般情况下,我们提到内存泄漏就是指忘记调用内存释放函数释放内存了的情况。 我们可以使用 valgrind 来检测内存泄漏,但是 valgrind 运行速度很慢,会让程序运行速度下降 成百上千倍,因此在一些场景下我们无法接受。比如,运行大量的测试的时候, 我们不希望等待太久才知道最终结果;线上环境使用 valgrind 则完全无法提供正常服务。 对于线上环境使用 Jemal...

使用 jemalloc 的 prof.dump 功能分析内存泄漏

内存泄漏的问题 内存泄漏的表项形式多种多样,不同的泄漏形式需要使用不同的工具来分析。 如果内存的使用随着程序运行而不断的增长,但是在进程退出的时候又完全释放干净, 那么这种内存泄漏就是假泄漏。这些泄漏形式如果要 valgrind 来检查,那么 valgrind 会 报告没有内存泄漏。因此 Valgrind 不适合用来分析这种形式的问题。 Jemalloc 也提供了内存泄漏的检测功能,一样...