服务器调优

部分内容转自:如何优化服务器的性能 - 南风轩 - 博客园

网络内核参数:blog.csdn.net/ysdaniel/article/details/7307091

陈皓性能调优攻略:coolshell.cn/articles/7490.html

1、系统资源

CPU 内存 磁盘IO 网络IO

2、性能调优

性能调优一般从以下几个方面入手。

(1)先看load(w,top,uptime),如果load高,说明系统某些资源出现了瓶颈,可以通过dstat和vmstat查看cpu,memory,IO哪些出现瓶颈,然后再具体看原因。

(2)有可能load不高,但就是响应时间比较长,这种情况可能是由于阻塞造成的,常见的比如工作线程都在等待某个事件发生,导致不能及时处理请求。

(3)还有一种情况是没有利用多核并发,比如某个耗时的任务只有一个线程处理,导致这个线程处理不过来造成流程上的阻塞,这种可以通过mpstat查看是不是集中在某一个或某几个核上。

(4)还有一种原因是内核代码导致的,比如不支持多队列的网卡上没有打开RFS,导致内核处理网络的逻辑没有负载在多个核上,这时候需要调整内核参数。

CPU

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%左右。

内存

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

网络IO

1)使用epoll代替select

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

3)减少消息交互次数

4)数据流使用长链接

5)优化应用层协议

6)   使用DPDK

磁盘IO

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

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

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

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

3、常用命令

1)dstat (综合)

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

2)vmstat (综合)

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

Procs:

r:运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)

b:处于不可中断状态的进程数,常见的情况是由IO引起的

Memory: 类似free命令

Swap:

si: 交换内存使用,由磁盘调入内存

so: 交换内存使用,由内存调入磁盘

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

IO:

bi: 从块设备读入的数据总量(读磁盘) (KB/s),

bo: 写入到块设备的数据总理(写磁盘) (KB/s)

随机磁盘读写的时候,这2个 值越大,能看到CPU在IO等待的值也会越大

System:

in: 每秒产生的中断次数

cs: 每秒产生的上下文切换次数

上面这2个值越大,会看到由内核消耗的CPU时间会越多

CPU:

us: 用户进程消耗的CPU时间百分比

us 的值比较高时,说明用户进程消耗的CPU时间多

sy: 内核进程消耗的CPU时间百分比

sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。

wa: IO等待消耗的CPU时间百分比

wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

id: CPU处在空闲状态时间百分比

3) 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。

4)mpstat (CPU)

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

5)perf (CPU)

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

6)strace (CPU)

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

7)gprof (CPU)

程序中每个函数的CPU使用时间。

每个函数的调用次数。并提供简单调用关系图。

使用步骤:

用gcc或g++编译程序时,使用-pg参数

执行编译得到的运行程序,会产生一个gmon.out文件

使用gprof命令。查看结果信息。(gprof -b proc_name gmon.out | less)

8)lsof (文件)

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

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

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

9)free (内存)

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

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

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

10)netstat (网络)

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

11)ifstat (网络)

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

12) tcpdump (网络网络)

linux下的抓包工具。可以把抓下来的信息重定向到文件里。使用wireshark打开。

13)iostat (磁盘)

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

14)nc (调试工具)

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

4、开发运维

代码中跟服务器资源相关的参数,包括连接数(内存 64G 200万),线程数(虚拟cpu数),qps(cpu busy),各种缓存(buffer)首先要做到可以静态配置,再高一点要求要做到动态配置,最终要做到代码可以根据服务器资源使用情况智能调整,同时还要有有效的服务降级策略,保证服务可用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,149评论 2 34
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,102评论 0 23
  • 这篇文章主要介绍一些常用的linux服务器性能监控命令,包括命令的常用参数、指标的含义以及一些交互操作。 几个问题...
    dancingking阅读 8,332评论 6 22
  • 作者:五月妈的生活 都说北京有三怪:人跑的比车快,花的要比挣得快,孙子孙女姥姥带。 哈哈~真是哭笑不得,作为北京长...
    五月成长日记阅读 1,058评论 2 2
  • 柳永才情绝世,却又是不折不扣的酒色之徒;他放荡不羁,却又是一个生就的情种;他满腹经纶,却终生抑郁,大志不伸;他自诩...
    博慧bohui阅读 1,020评论 0 6