作者:yurunsun@gmail.com 新浪微博@孙雨润 新浪博客 CSDN博客日期:2013年7月9日
linux后台开发需要熟练掌握哪些技能呢?
1. 内存泄漏
- cpu wait% ↑
- top: swap memory ↑
- kswap进程
- valgrid中malloc/free值
- 调用
mallinfo
输出当前所占内存 - strace -p
2. 野指针
valgrid中access invalid address
3. 机器负载较高
- 内存泄漏:top
- 进程太多: vmstat 1
- io阻塞:vmstat 1
4. 多线程
- 线程参数不能是局部变量
- pthread_join或boost::thread::join等于waitpid, 调用者会阻塞
- socketfd等资源无法共享
- 使用gcc -pthread 或者 -D_REENTERANT来解决全局变量重入问题
-
使用_r版本的库函数解决库函数重入问题
readelf -s /lib/libc-2.17.so | grep _r@
查看所有_r版本函数
- 互斥逻辑rcntl, flock, semaphere, mutex, rwlock
- 内存原子操作
5. TCP
-
状态转移图
CLOSED, LISTEN, SYN_RCVD, SYN_SENT, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, TIME_WAIT
- 为什么要三步握手
- 为什么要有TIME_WAIT
6. coredump
ulimit -c unlimited
gcc -g
-
gdb
gdb -c core bin (gdb) bt (gdb) l (gdb) frame 0 (gdb) p this->m_value
7. 智能指针
scoped_ptr
shared_ptr
weak_ptr
enable_shared_from_this
noncopable