zhuizhuhaomeng Blog

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

Limit the Resource with ulimit


Get Memory from OS and Put Memory back to OS

概述 一般情况下,C 语言申请和释放内存是使用 malloc, calloc, free 这些接口。 而这些接口是 libc/tcmalloc/jemalloc 等内存分配器提供的接口,而不是操作系统提供的接口。 那么像 libc/tcmalloc/jemalloc 等这些内存分配器的实现是如何向操作系统申请内存的呢? libc 主要使用的是 brk/sbrk 这个接口,而对于 tcam...

curl send client hello after 200ms

反馈问题 同事发现业务的请求有点慢,使用 curl 测试一下指定的网站看看响应时间。结果发现需要 229 ms 才响应。 1 2 3 4 5 6 7 8 9 10 time curl -k https://a.b.c.d:443 <!doctype html> <html lang=en> <title>404 Not Found</title&...

使用 jq 分析 json 文件

经常要分析 json 文件,如果用肉眼查看,实在是太累了。 使用 jq 来过滤需要的值将大大增加工作效率。 安装 jq 1 yum install -y jq 1 apt-get install -y jq jq 的命令介绍 基本概念 jq 的语法是清晰的: 语法 描述 , 由...

Makefile 问题记录

设置并发上限 make 一般加上 -j 参数可以并发编译,提升编译的速度。但是我遇到一个并发数量太大导致 内存不足,最终进程别 OOM Killer 杀死的情况。因此就想现在并发数量。 下面是设置并发上限的示例 job=$(shell n=$$(nproc) && [ $$n -lt 16 ] && echo $$n || echo 16) all: ...

使用 Jemalloc 作为 nginx 的默认内存分配器

我们希望能够使用 Jemalloc 作为 nginx 默认的内存分配器, 但是我我们不想要重新编译 Nginx。这个时候可以在启动 Nginx 的时候加上 LD_PRELOAD 来实现目标。 我们先通过如下命令查找开启启动的配置文件。 1 2 $ rpm -ql openresty | grep system /usr/lib/systemd/system/o...

Why got the TCP reset pakcet

我们在排查网络问题的时候有时候会发现由于收到 TCP reset 报文导致连接中断或者连接不上的问题。 那么到底有哪些情况会导致收到 TCP reset 报文呢?下面列举一些常见的例子,如果有更多的情况,欢迎补充。 [TOC] 目的端口没有打开 目的端口没有打开这种情况是比较常见的。 比如: 机器重启了,但是服务没有设置开启启动。 程序重启了,端口被关闭又打开的瞬间接收到的 ...

使用 Python 脚本删除重复的图片

由于各种原因导致电脑上备份的照片有大量的重复,因此希望能够删除这些重复的照片。 这些重复的照片是由于云同步,换手机同步等原因导致的重复。 所以,这些重复的照片的文件内容的二进制数据是完全一样的,而不是视觉上的一样。 因此可以通过简单的计算文件的 MD5 来判断文件是否重复。 下面简短的代码实现删除重复的照片。 这里只是简单的删除重复,而没有办法选择保留哪些路径下的照片。 比如,我们原来有...

proc of the linux

获取进程创建时间 如果我们想要获取进程的创建时间,那么可以通过下面的命令 stat /proc/pid 1 2 3 4 5 6 7 8 9 $ stat /proc/1 File: /proc/1 Size: 0 Blocks: 0 IO Block: 1024 directory Device: 5h/5d Inode: 13428 ...

How to install debuginfo

为什么需要调试信息 对于大部分 Linux 用户来说,安装调试信息包并没有任何意义,因为他们只是使用软件而不会去调试软件故障。 作为开发者来说,在遇到崩溃等软件故障时,安装调试信息包是一个必不可少的步骤。 但是不同的发行版本的操作系统的安装方法又不一样,确实让人头疼。 Fedora 序列 如果不知道某一个软件对应的软件包的名字,可以通过 rpm -qf $(which $exe) 这...