zhuizhuhaomeng Blog

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

How to use OpenResty shared dictionary

遇到的错误 使用 OpenResty 共享内存字典的同学偶尔会遇到 out of memory 的错误。那么这种错误是如何产生的,要怎么解决呢? 共享内存基本情况回顾 首先,我们来了解一下共享内存都有哪些特性。 从是否过期的角度,分成会过期和不会过期两种情况。 从在内存满的时候是否删除未过期表项可以分为强制删除和不删除未过期表项 从是否覆盖已经存在的表项分为覆盖和不覆盖...

how to build boringssl for HTTP3

compile command 1 2 3 4 5 6 7 8 9 10 11 12 13 git clone git@github.com:google/boringssl cd boringssl mkdir -p build cd build cmake -DBUILD_SHARED_LIBS=1 .. make -j$(nproc) make install cd .. rm -...

5 分钟帮客户定位 52G 内存泄漏的原因

Nginx 的内存池让 Nginx 的内存泄漏变得很不容易。不过我们的一个客户的 Nginx 进程却泄漏了 52G 的内存。 第一眼看到 Nginx worker 进程消耗了 52G 内存着实吓人。 我们观察一下 Nginx 的内存增长趋势,发现所有的 Nginx 进程内存都是 52G。这说明这些被使用的内存是被所有 Nginx 进程共享的。而共享内存是 Nginx 多进程通信之间的一个...

U 盘照片恢复

U 盘出问题了,U 盘上的照片读不出来,心里那个郁闷啊。 好在有万能的 Linux 可以帮忙。仅仅用下面的命令就将 U 盘上的照片恢复了。 注意,如果你也要恢复文件,需要将 /dev/sdc 替换为你实际的 U 盘设备。 1 2 3 4 5 sudo apt-get install testdisk cd ~ mkdir recup_dir sudo photorec /d recup_...

我常用的 docker 命令

让容器开机启动 首次执行使用这个命令 1 docker run --restart=always --name container-name -d 4e97feadb276 /bin/bash 修改已经存在的容器使用这个命令 1 docker update --restart=always 0576df221c0b 把容器当成虚拟机来执行 构建容器 把下面的配置保存到文件 ...

一个 LuaJIT 的 ffi.copy 内存越界导致进程崩溃的问题

问题代码 我们 OpenResty 的 privilege 进程经常崩溃,最终发现是类似于下面这样的代码出现的问题导致的。 1 2 3 4 local src = "a string value" local len = #src local dst = ffi.new(len) ffi.copy(dst, src) 导致改写的原因 如果你没有办法一眼看出来是怎么回事,那么是很正常...

OpenResty 拦截并使用 HTTP 代理流量

我需要用到 HTTP 用代理,因为一些网络限制的客观原因没有办法直接连接 HTTP 代理。 因此我们通过将流量导入 OpenResty 节点,然后用 OpenResty 的 stream 模块的 content_by_lua 代理流量到 HTTP proxy 节点。 需要注意,网络的很多透明代理是指 OpenResty 网关代理客户端的流量,保持客户端 IP 地址不变。 我这里的透明代理是...

build curl that support http3 from source code

I build the curl on ubuntu-20. You need to change the dependences if you want to build on other OSes. install the dependences first 1 2 3 4 5 6 7 8 sudo apt-get install -y libsystemd-dev sudo a...

Linux 网络调优

为了充分利用机器的性能,我们需要对 Linux 系统参数进行调优。 比如 Nginx/OpenResty 服务器做反向代理,我们就希望单击可以达到百万连接数。 调优的过程中,我们要采用自顶向下,逐层递进的方式来进行调优。这里的自顶向下不是说从应用层到物理层, 而是说我们应该从粗到细,而不应该一下子陷入细节。 在调优之前,我们应该先识别系统的瓶颈,一般都采用模拟业务的压测的方式来制造瓶颈是...

Linux coredump 配置

apport 默认的 core_pattern ubuntu 22 的 core pattern 默认如下: 1 2 $ cat /proc/sys/kernel/core_pattern |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E 日志文件 在默认配置下,如果进程产生崩溃,那么生成的日志会在...