zhuizhuhaomeng Blog

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

排查 PostgreSQL 慢查询发现 mlocate-updatedb 导致的 IO 瓶颈

背景 客户其中一套系统的 PostgreSQL 出现很多的慢查询,发现 PostgreSQL 所在机器的 IO 利用率很高。 因为该机器有好多块硬盘,而且硬盘的型号以及相应的服务都不一样,因此我们只能一块块硬盘来分析。 分析过程 我们使用 iotop 工具来分析磁盘 IO 的占用问题。比如 1 2 3 4 5 6 Total DISK READ : 66.61 K/s | ...

谁占用了我的磁盘空间

背景 有一台线上机器报警说磁盘空间不足,磁盘利用率接近 95%。 同事上登陆机器查看并清理了数据库的日志文件,但是磁盘空间利用率并没有明显变化。 我接手分析该问题,刚开始也是按照常规的思路分析,发现有一些备份文件占用了绝大多数的磁盘空间, 因此给出了将备份数据转移到其它机器的建议。但是同时我还发现 du -hs 统计的磁盘空间和实际的 磁盘空间利用率差别比较大,因此就不得不深入分析到底谁还...

nginx worker_shutdown_timeout 是怎么工作的

背景 我们修改 nginx 的配置之后,为了让新的配置生效,我们需要重新载在 nginx 的配置文件。 为了让配置生效,我们需要执行 nginx -s reload 这样的命令。根据实际情况可能会有所不同, 比如有的系统上是 systemctl reload nginx, 如果是 OpenResty,那么是 systemctl reload openresty。 这些命令最后都是向 ngi...

SSH 打造开发环境

使用 SSH 访问国际网络 1 2 3 # 如果防火墙打开的话 sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp ssh -qTfnN -D 0.0.0.0:8080 user@remote-host 使用 SSH 构建一个 SOCK5 代理,我们使用到如下的 SSH 选项: 1 2 3 4 5 -q ...

怎么选择内存分配器

很多软件,我们没有必要对其内存使用进行优化。这是因为有些软件的内存消耗非常的小,不值得再继续优化; 有些软件虽然开销很大,但是对于业务运行没有影响,因此也就没有必要 (动力) 优化。 我们需要执行优化,很多时候是使用(测试/压测)过程发现了问题。软件还是那个软件,但是因为使用的场景变化了, 新的问题就出现了。比如个人使用 OpenResty 做反向代理来管理自己的几个小站点,这个时候就不容...

Glibc Memory Allocation Tune

<2.26 export MALLOC_ARENA_MAX=1 =2.26 GLIBC_TUNABLES=glibc.malloc.mmap_max=1:glibc.malloc.top_pad=1 参考资料 https://sourceware.org/glibc/wiki/MallocInternals https://www.gnu.org/software/lib...

Socket 的选项详解

这些 socket 选项都有什么用 [TOC] SOL_SOCKET SOL_SOCKET.SO_SNDLOWAT 作用 man 7 socket SO_RCVLOWAT and SO_SNDLOWAT Specify the minimum number of bytes in the buffer until the ...

为什么 CURL 没有收到响应

问题的由来 在写测试用例的时候,需要指定源 IP 地址发起连接,这时候想到用 curl 的 –interface 来指定源 IP 地址。 以下是 OpenResty 中的 Lua 通过 os.execute 代码执行 curl 的命令 1 2 3 content_by_lua_block { os.execute("curl --interf...

epoll 的一些学习笔记

边沿触发,分多次系统调用读完所有数据 该实验的目的是展示边沿触发需要一次性处理完所有 socket 里面的数据。 实际的工程中不一定是一次性处理完,有可能是推后处理:比如为了公平性,一个 socket 最多处理 64k 的数据,如果还有未处理完毕的数据,那么加入待处理队列接着处理下一个 socket 的数据。 server 的代码 #include <arpa/inet.h>...