共计 3791 个字符,预计需要花费 10 分钟才能阅读完成。
性能优化是为了提高性能性能,减少资源消耗和应用对系统的影响。如果过早实施,或者没有性能评估,性能性能优化可能,或者必须导致相反的效果。
但是如果系统的进行,性能优化可以是一门科学,一种艺术。
方法
首先搞清楚什么是“正常”情况。
寻找潜在的性能问题,调整性能参数修复问题,调整后监控系统性能,以决定是保留修改还是回退。
总结:
- 收集数据建立基线
- 启用优化,选择合理默认值
- 查看图表,我们的优化是不是正确选择?提交或回退
- 确认潜在的性能问题
- 调整优化参数
- 回到 3
在我们开始前建立一个基准
之前和之后的指标
对于具体的指标,通过使用压力测试程序,你可以快速建基准,以衡量之前和之后的变化。参见 Stress testing with Apache JMeter 早期 sysadvent 日历测试的例子。
历史指标
已经你已经有历史指标,可以利用图表对历史资源监控。即便在自动化分析的年代,老的 Mk1 Eyeballis 仍然是很有用的。你需要的是图表,而不是一屏的数字。
(你也可以给你的老板秀一下漂亮的图表,如果你老板顺道部你上班时间都在干什么。)
你应该用图形化的方式来查看所提供的服务上的使用情况和响应时间。针对 web 服务器,指标就应该是请求的数量,每次请求响应的时间,还有每次响应消息的大小。
对于 apache 和 nginx,看看《在 apache 和 nginx 中进行日常日志记录工作》,这篇文章描述了如何将必要的量化指标数据记录日志。
你应该以图形化的方式描述其所使用的资源的使用情况,队列和响应时间。这常常意味着针对磁盘和网络 IO 的资源图。以图形化的方式描述每秒的请求数,还有请求 - 响应的延迟。
用于图形化展示的工具
我个人喜欢用 Munin。这个工具可以在 EPEL 仓库找到。这个工具绝对称得上“老式的”,但它非常容易上手,而且它还有非常丰富的插件可供使用。在你安装使用 Munin 上,它会默认安装许多图形化工具。如果你需要更多的图形化插件,你可以在 contrib 仓库上找到它们。
对于一些更先进的监控工具,Elasticsearch,Logstash 和 Kibana 在日志分析和可视化展示方面更受欢迎。设置 ELK 来加载所需要监控的数据,使用 Topbeat 作为资源使用度衡量标准,使用 Filebeat 作为实时日志文件分析,使用 Packetbeat 来分析在线网络数据。
可选的工具有很多,选用你所了解的,喜欢的或者你想学习的。你需要记住的最重要的事情是:确保在你开始修改操作前知道你的基准数据。
性能调优工具
tuna
tuna 可以用来控制进程及其调度关系。
例如:在一个健状的系统上却有差的网络性能,并且可以观察到有几个处理核心处于空闲状态。通过检查网卡发现多工调度队列功能已开启,而且它们已经分布在所有可用的处理核心上。
此处假设这些网卡命名为“enp1s0f0“和”enp1s0f1“:
[root@linuxidc ~]# tuna –irq ‘enp1s0f*’ –socket 0 –spread –show_irqs
# users affinity
69 enp1s0f0 0 igb
70 enp1s0f0-rx-0 1 igb
71 enp1s0f0-rx-1 2 igb
72 enp1s0f0-rx-2 3 igb
73 enp1s0f0-rx-3 4 igb
74 enp1s0f0-tx-0 5 igb
75 enp1s0f0-tx-1 6 igb
76 enp1s0f0-tx-2 7 igb
77 enp1s0f0-tx-3 0 igb
79 enp1s0f1 1 igb
80 enp1s0f1-rx-0 2 igb
81 enp1s0f1-rx-1 3 igb
82 enp1s0f1-rx-2 4 igb
83 enp1s0f1-rx-3 5 igb
84 enp1s0f1-tx-0 6 igb
85 enp1s0f1-tx-1 7 igb
86 enp1s0f1-tx-2 0 igb
87 enp1s0f1-tx-3 1 igb
对于拥有多套接口的系统,你可以把你喜欢的进程移到某个套接口,并且把网络管理移到另一个套接口。
tuned
Tuned 这个工具已经在 Red Hat 的多个发行版中可用。
Tuned 带有多种调优预置配置;用于各种通用服务器的合理的默认配置。用于“虚拟用户”的配置,用于“虚拟主机”的配置,还有用于“高吞吐量”或者“低延迟”的预置配置。他们应该对更进一步的应用提供初始配置。例如
[root@linuxidc ~]# tuned-adm list
– balanced
– desktop
– latency-performance
– network-latency
– network-throughput
– powersave
– throughput-performance
– virtual-guest
– virtual-host
Current active profile: throughput-performance
不同的默认预置配置有着健全的文档,而且如果你想自定义的话,有初始配置文件可供使用。
在物理机上默认的预置配置是“throughput-performance“或者”balanced“,在虚拟机上的默认预置配置是”virtual-guest“。
tuned 的默认预置配置在 /usr/lib/tuned 目录下。
[root@linuxidc ~]# tree /usr/lib/tuned
/usr/lib/tuned
|– balanced
| `– tuned.conf
|– desktop
| `– tuned.conf
|– functions
|– latency-performance
| `– tuned.conf
|– network-latency
| `– tuned.conf
|– network-throughput
| `– tuned.conf
|– powersave
| |– script.sh
| `– tuned.conf
|– recommend.conf
|– throughput-performance
| `– tuned.conf
|– virtual-guest
| `– tuned.conf
`– virtual-host
`– tuned.conf
每个配置包括一个 tuned.conf 文件,这个文件带有 INI 文件语义格式和一个可选的脚本解释器。
如果想生成一个自定义的配置文件,你可以拷贝这些目录上的一个到 /etc/tuned 目录,做必要的修改并激活使用。
[root@linuxidc ~]# cp -a /usr/lib/tuned/throughput-performance /etc/tuned/wonderprofile
[root@linuxidc ~]# vim /etc/tuned/wonderprofile/tuned.conf
[root@linuxidc ~]# tuned-adm profile wonderprofile
例如:/etc/tuned/wonderprofile/tuned.conf 文件,对它进行少量调整。
[main]
include=throughput-performance
[sysctl]
net.ipv4.tcp_rmem=”4096 87380 16777216″
net.ipv4.tcp_wmem=”4096 16384 16777216″
net.ipv4.udp_mem=”3145728 4194304 16777216″
同样对 /etc/tuned/wonderprofile/script.sh 进行调整。
#!/bin/sh
# Lots of functions in here to use
. /usr/lib/tuned/functions
start() {
[“$USB_AUTOSUSPEND” = 1] && enable_usb_autosuspend
enable_wifi_powersave
return 0
}
stop() {
[“$USB_AUTOSUSPEND” = 1] && disable_usb_autosuspend
disable_wifi_powersave
return 0
}
process $@
拓展阅读
我只是提及了很少的系统管理员工具。Red Hat 有丰富的文档展示如何调优以及如何衡量(或者其它的方式),使用比我所提到的更多的工具。
对于电源管理方面,例如即使你忘了在家充电也可以使你的笔记本电脑在工作时间使用,请参见 Red Hat Enterprise Linux 7 Power Management Guide。
对于性能调优,想使你的昂贵的服务器焕发更多的活力,参见 Red Hat Enterprise Linux 7 Performance Tuning Guide。
英文原文:RedHat Performance Tuning
更多 RedHat 相关信息见 RedHat 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=10
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-12/126864.htm