Linux
常用命令,比如free strace netstat iostat top等
- free:显示内存使用情况。
- strace:跟踪系统调用。
- netstat:显示网络连接。
- iostat:显示CPU和I/O设备使用情况。
- top:显示系统运行情况。
Linux子进程,fork的返回值,多线程下fork的风险和规避,子进程内存何时复制
- fork:创建子进程,返回值为0表示子进程,正数表示父进程。
- 多线程下fork的风险:子进程只复制调用fork的线程,可能导致死锁。
- 规避方法:使用pthread_atfork注册处理函数。
- 子进程内存复制:写时复制(Copy-On-Write)。
Linux的负载 (uptime 命令查看的东东)
uptime:显示系统运行时间、登录用户数、系统负载。
- 系统负载:表示系统的繁忙程度,通常为1分钟、5分钟、15分钟的平均负载。
性能问题定位(brpc文档有讲)
使用perf、strace、gdb等工具定位性能问题。
- perf:性能分析工具,分析CPU使用情况。
- strace:跟踪系统调用,分析程序行为。
- gdb:调试工具,分析程序崩溃原因。
文件映射
使用mmap将文件映射到内存,提高文件访问效率。
- 特点:将文件内容映射到内存地址空间,访问文件如同访问内存。
- 适用场景:大文件读写、共享内存。
进程内存的种类
堆、栈、数据段、代码段。
- 堆:动态分配的内存,使用malloc、free管理。
- 栈:函数调用时分配的内存,自动管理。
- 数据段:全局变量、静态变量存储区。
- 代码段:存储程序代码的内存区。
核心转储
当程序崩溃时,生成核心转储文件,用于调试。
- 核心转储文件:包含程序的内存映像、寄存器状态等信息。
- 适用场景:分析程序崩溃原因、调试错误。
系统调用的跟踪(strace等)
使用strace跟踪系统调用,分析程序行为。
- strace:跟踪系统调用,显示调用参数和返回值。
- 适用场景:调试程序、分析性能问题。
内存相关: 交换空间 页面缓存 mmap 直接io
- 交换空间:将内存数据交换到磁盘,释放内存。
- 页面缓存:缓存文件数据,提高访问速度。
- mmap:将文件映射到内存,提高文件访问效率。
- 直接IO:绕过页面缓存,直接读写磁盘,提高I/O性能。