平均负载


uptime

最后这三个值,分别代表在过去1分钟,5分钟,15分钟

平均活跃进程数

可以知道系统负载升高了,但具体是CPU还是I/O升高了,还不能确定.


psi

Facebook贡献给Linux内核一个psi工具,4.2以后的内核都有该命令.

最新版本在/proc/pressure下面,有cpu,io,memory三项

指数衰减平均值



内存优化


为什么内存池可以优化内存性能?

malloc分配小块内存时,基于brk(使用内存里的缓存,从缓存取出一小段,使用完了并不返回给系统,仍然放在内存里,下次用时可以直接用)实现;

分配大块内存时,使用mmap(内存映射)实现



快速定位磁盘I/O性能问题


iostat和sum命令,确定是否有I/O性能问题

pidstat和wimstat


为什么网络性能优化相对更难?


Linux到底支持多少并发连接?


c10k,c100k,c10m问题



怎样解决恼人的TIME_WAIT问题


三次握手比较简单, 而四处挥手,相对麻烦.在某些场景也可以合并为三次.

time_wait就是四次挥手时的一个中间状态

主动关闭连接的过程中,当主动关闭的一方发出syn包后,会进入time_wait状态..从time_wait到close状态之间有一个time_out,在内核中time_out是两个MSL,只有过了time_wait这个状态的TCP的socket,才会被内核回收

如果没有time_wait,将会有各种问题,如下:

对于被动关闭的一端,有一个close_wait状态.只需要一个ack,就可以编程close状态了,相对来说要简单很多

即只有主动关闭连接那一方,才会出现time_wait状态

time_wait过多, 危害是每个time_wait会占用一个端口号和连接跟踪表,相对内存来说, 这两者数量都是有限的

解决办法:

  1. 修改内核中连接跟踪表的数量,改的大一点

  2. 减小time_out的值,使网络连接尽快释放

  3. 重用属于time_wait状态的TCP连接,可以开启tcp_reuse选项.

  4. 修改增大系统文件描述符的数量(socket也是一种文件描述符)