首页 | 归档 | 分类 | 标签 | 关于 |
|
1 | !/bin/sh |
例如下的 shell 脚本:
1 | VARIABLE=$(/some/command); |
如果 $VARIABLE
时一个包含空格或者其他特殊字符的字符串,并且使用了单个方括号。那么该字符串可能会被拆分成多个单词。这些中的每一个都被视为一个单独的参数。
注意:单个方括号和两个方括号区别:https://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash
因此无法按照我们想要的去比较。可以将变量用双引号括起来,强制他保持为一个字符串。
libio:https://github.com/wxggg/libio
微信的 matrix android hook 监控:https://github.com/Tencent/matrix/wiki/Matrix-Android-IOCanary
polyHook git 库:
https://github.com/stevemk14ebr/PolyHook
技术文档:https://www.codeproject.com/articles/1100579/polyhook-the-cplusplus-x-x-hooking-library
glibc 源码阅读:
1 | glibc源码下载地址 |
jemalloc 源码分析:https://youjiali1995.github.io/allocator/jemalloc/
jemalloc 官网:https://jemalloc.net/
git 地址:https://github.com/jemalloc/jemalloc
官方文档:http://jemalloc.net/jemalloc.3.html#opt.zero_realloc
其他文档:
在内存监控中,我们想要监控线程的内存使用。但是在 Linux 中,一个进程中的所有线程共享进程的内存空间。这就导致我们无法准确的获取线程的内存使用。比如 A 线程申请的内存,可能会被 B 线程释放。
在 jemalloc 的内存分配实现中,arena 是最顶层的内存分配单元。jemalloc 会创建一定数量的 arena,每个线程都会绑定到 arena 上。线程采用 round-robin 轮询的方式选择可用的 arena 进行内存分配,为了减少线程之间的锁竞争,默认每个 CPU 会分配 4 个 arena。
因此我们可以将线程进行分类,然后自定义将线程绑定到某个 arena 上。然后监控此 arena 申请或者释放的内存。我们便可以得到某类线程的内存状况。
jemalloc 提供了设置调用线程的 arena 的方法。
1 | unsigned arena_num = 1; |
1 | #include <malloc.h> |
编译时加上 -g
选项。
1 | # valgrind --tool=memcheck --leak-check=full ./main |
Linux 中一切皆文件,普通的文件、目录、块设备、套接字、管道等都是文件,通过统一的文件系统来管理。Linux 文件系统为每个文件都分配两个数据结构,索引节点(index node)和目录项(directory entry)。他们主要用来记录文件的元信息和目录结构。