<返回更多

服务器性能优化的思路和工具分享

2023-07-25  今日头条  架构思考
加入收藏

一、系统资源

通常服务器的性能会卡在四个地方:CPU、内存、网络IO和磁盘IO。

二、性能调优

2.1 CPU

一个好的架构,服务器的CPU总消耗总是平均的分布在各个cpu上,CPU的消耗在70%左右。

1)使用多线程 或多进程编程,充分利用多核CPU。老的线程库效率太低,需要升级用NPTL 。

2)进(线)程数不要远超cpu数,减少进程无味的切换。

3)慎重选择阻塞性IO,阻塞会导致进程切换,浪费CPU资源。

4)事件发生的时间无法估计或比较长,则不应该使用轮询的方式,尽量用异步方式等待事件就绪。

5)谨慎用锁,尽量把数据分配到各个线程,减少共享资源,减少竞争,lockfree。

6)类中有联系的数据尽量放在相邻的位置,可以放到一个cacheline里。

7)慎用字符串操作,比如sprintf,snprintf,因为%d %s等等都需要CPU资源去做词法分析,数量多的话,也是不菲的开销减少系统调用,例如time,主要消耗在用户态和内核态之间的切换。

8)优化算法,减少遍历操作。

9)优化架构,把系统管道调整到统一的半径,解决瓶颈。

10)使用一些静态池技术,比如内存池,线程池,连接池等,用空间换时间。

一个好的架构,服务器的CPU总消耗总是平均的分布在各个cpu上,CPU的消耗在70%左右。

2.2 内存

程序需要多少内存需要在设计的时候估计清楚,如果占用的内存接近物理内存,将会使用交换分区,影响性能。
2.3 网络IO

1)使用epoll代替select

2)使用非阻塞的模式来开发

3)减少消息交互次数

4)数据流使用长链接

5)优化应用层协议

6) 使用DPDK

2.4 磁盘IO

1)内存中缓存写入磁盘的数据,批量写磁盘,减少写入次数

2)利用顺序写,减少寻道次数

3)内存缓存热点数据,缓解磁盘读压力

4)对磁盘IO密集型的服务使用SSD盘

三、常用工具

3.1 top(CPU&内存)

可以查看系统中运行的进程的状况,CPU使用状况,系统负载,内存使用等。它是检查系统进程运行状况最方便的工具了,它默认显示部分活动的进程,并且按照进程使用CPU的多少排序。它可以显示全部CPU的使用状况,也可以显示每个进程都运行在那个CPU上面。

主要可以用top来看哪些进程或者哪类进程占用CPU和内存资源最多,以此迅速定位存在性能问题的进程,以及运行异常的进程。

load average: 0.06, 0.60, 0.48 - 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。这个值最好小于0.7,一般大于0.7说明需要调优。

%CPU这个字段在多线程多核的环境中会超过100。

3.2 free(内存)

free命令显示系统内存的使用状况(物理内存和交换内存)通过这个命令我们可以看到系统进程实际使用的物理内存,buffer和cache使用的物理内存。

第二行的used/free是OS角度,包括buffer和cache使用的内存。

第三行的used/free是用户角度,不包括buffer和cache使用的内存。

3.3 vmstat(综合)

vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下问切换、CPU使用等。

 

Procs

Memory 类似free命令

Swap

内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。

IO

System

CPU

3.4 Strace(CPU)

可以用来查看一个进程在执行过程中的系统调用和所接收的信号。

 

3.5 tcpdump(网络)

linux下的抓包工具。可以把抓下来的信息重定向到文件里。然后在windows下用ethereal来分析。很强大

3.6 gprof(CPU)

 

使用步骤:

3.7 dstat (综合)

dstat 是一个可以取代vmstat,IOStat.NETstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。

 

3.8 mpstat (CPU)

它能实时监测多处理器上每个CPU的使用情况。

3.9 perf (CPU)

perf top命令可以查看哪些内核调用或用户调用的性能。另外perf stat通过概括精简的方式提供被调试程序运行的整体情况和汇总数据。

 

3.10 lsof (文件)

它能列出当前系统打开的文件描述符,可以看到哪些进程打开了哪些文件。文件描述符有两个层次的概念:用户级限制和系统限制,用户级限制可以通过ulimit

-n查看,系统级限制可以通过sysctl

-a命令查看,其中fs.file-max是整个系统共能打开的文件描述符,epoll.max_user_watches是一个用户能往epoll内核事件表中注册的事件总量,往epoll内核事件表中注册一个事件,在32位系统上大概消耗90字节的内核空间,在64位系统上则消耗160字节的内核空间。

3.11 netstat (网络)

可以打印本地网卡接口上的全部连接,路由表信息,网卡接口信息等,一般用netstat -apn

3.12 ifstat (网络)

它是一个网络流量监测工具,可以输出各个网卡的in/out流量信息。

3.13 iostat (磁盘)

它主要用于监控系统设备的IO负载情况。

3.14 nc (调试工具)

主要用来快速构建网络连接。可以让它以服务器方式运行,监听某个端口并接收客户连接,可以用于调测客户端程序。也可以使之以客户端方式运行,向服务器发起连接并收发数据,可以用于调试服务器程序。

文章来源:
https://www.jianshu.com/p/316b17acde6a

关键词:服务器      点击(6)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多服务器相关>>>