zhuizhuhaomeng Blog

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

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 日志文件 在默认配置下,如果进程产生崩溃,那么生成的日志会在...

给 kvm 虚拟机扩展磁盘分区

使用 virt-filesystems 查看当前的虚拟机的磁盘分区的情况。 可以看到磁盘 /dev/sda 分成两个分区,分别是 /dev/sda1, /dev/sda2。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ virt-filesystems -h --all --logical-volumes --long -a centos9.qcow2 Name...

如何更改启动的内核

查看当前安装的内核 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $ sudo grubby --info=ALL index=0 kernel="/boot/vmlinuz-4.18.0-477.10.1.el8_8.x86_64+debug" args="ro crashkernel=auto resume=/dev/...

ocserv 组网配置

参考文档 搭建过程主要基于官方文档:https://ocserv.gitlab.io/www/manual.html 主要参数 这里假设域名为 my.com, 请根据实际需要修改。后面会反复用到 my.com 这个域名 参数名称 参数值 说明 认证方式 证书   ...

OpenResty 怎么做日志切割

logrotate in nginx nginx 官方给出的日志切割建议如下: 1 2 3 4 mv access.log access.log.0 kill -USR1 `cat master.nginx.pid` sleep 1 gzip access.log.0 # do something with access.log.0 可以参考官方文档 https://www.n...

OpenResty 集成 lfs 模块

为什么需要 lfs 文件操作是所有软件都需要具备的一个非常基本的操作。因为 Lua 本身没提供足够的文件操作接口。 因此就有了不少第三方模块。 Lua lfs 模块就是为了解决文件操作接口不足的问题。那么 OpenResty 应该如何集成 lfs 模块呢? 编译 lfs 模块 lfs 模块打 patch 在使用全局变量会导致 OpenResty 打印告警信息,为了消除这个告警信息,...

Nginx EBPF 是怎么工作的

背景 Nginx 是多进程的架构,一个端口就会被多个进程同时进行监听。 因此 Linux 内核在派发报文的时候就需要一个策略来确定如何将报文发送给哪个进程。 对于 TCP 来说,这个事情就显得简单得多了。因为 TCP 是采用面向连接的协议, 每一个连接会关联一个独立的 socket,这个 socket 拥有不同唯一的 4 元组(源 IP, 目的 IP,源端口,目的端口)。 因此,Linux...

wireguard 组网配置

安装 wireguard 客户端 参考 https://www.wireguard.com/install/ 1 yum install wireguard-tools 生成公钥和配置 IP 地址 带图形界面的客户端,新建一个隧道就会自动生成成对的私钥和公钥。 如果是命令行,则使用如下命令: 1 2 cd /etc/wireguard wg genkey | t...

mariner Linux 系统在 ssh 退出后杀死了手动启动的后台进程

问题 我们通过下面这样的命令启动了 OpenResty, 在 ssh 登出后,nginx 进程被系统杀死了。 1 sudo /usr/local/openresty/nginx/sbin/nginx -p /usr/local/openresty/nginx 定位是谁杀死了 nginx 要定位谁杀死了 nginx,就需要看看是什么进程发送了信号。这个可以使用 systemstap ...

OpenResty 过滤响应体

响应体过滤的问题 很多初学者在使用 OpenResty 过滤响应体的时候总是会遇到错误而调试半天。 最常见的就是没有先把 Content-Length 的响应头清空。 因为过滤响应体基本上是会修改响应体的大小,如果不删除响应头的 Content-Length, 那么响应体大小和 Content-Length 的值就对不上,这就导致协议错误。 另外一个是要对响应体进行修改,最好是未压缩的...