RedHat 性能调优
RedHat 性能调优
性能优化是为了提高性能性能,减少资源消耗和应用对系统的影响。如果过早实施,或者没有性能评估,性能性能优化可能,或者必须导致相反的效果。
但是如果系统的进行,性能优化可以是一门科学,一种艺术。
方法
首先搞清楚什么是“正常”情况。
寻找潜在的性能问题,调整性能参数修复问题,调整后监控系统性能,以决定是保留修改还是回退。
总结:
-
收集数据建立基线
-
启用优化,选择合理默认值
-
查看图表,我们的优化是不是正确选择?提交或回退
-
确认潜在的性能问题
-
调整优化参数
-
回到 3
在我们开始前建立一个基准
之前和之后的指标
对于具体的指标,通过使用压力测试程序,你可以快速建基准,以衡量之前和之后的变化。参见 Stress testing with Apache JMeter 早期 sysadvent 日历测试的例子。
历史指标
已经你已经有历史指标,可以利用图表对历史资源监控。即便在自动化分析的年代,老的 Mk1 Eyeballis 仍然是很有用的。你需要的是图表,而不是一屏的数字。
(你也可以给你的老板秀一下漂亮的图表,如果你老板顺道部你上班时间都在干什么。)
你应该用图形化的方式来查看所提供的服务上的使用情况和响应时间。针对 web 服务器,指标就应该是请求的数量,每次请求响应的时间,还有每次响应消息的大小。
对于 apache 和 nginx,看看《在 apache 和 nginx 中进行日常日志记录工作》,这篇文章描述了如何将必要的量化指标数据记录日志。
你应该以图形化的方式描述其所使用的资源的使用情况,队列和响应时间。这常常意味着针对磁盘和网络 IO 的资源图。以图形化的方式描述每秒的请求数,还有请求-响应的延迟。
绘图工具
我有时候会用到 Munin,可以在 EPEL 仓库找到,这个确实是比较古老,但是比较容易上手,而且插件之多简直让人吃惊。Munin 的默认安装就带有大量图的类型,在 contrib 仓库里还有更多的图的插件。
作为更新一些的监控方式,Elasticsearch, Logstash 和 Kibana (ELK) 在日志分析和可视化方面非常流行。要把数据推给 ELK,Topbeat 可以用于资源使用的数据,Filebeat 可以用于日志文件的实时分析,Packetbeat 可以用于网络数据的分析。
还有很多其他的替代者。你可以选择你熟悉的、喜欢的或者想学的。最重要的是:确定你在做事之前明白自己的底线。
性能调优工具
tuna
Tuna 可以让你对处理器进行控制,并能很方便的进行调度。
例如:假如你拥有一个网络性能很差不过很稳定的系统,并且发现有几个核心是空闲的,就可以检查一下网卡是否已经开启了多个调度队列,以使其对性能的消耗可以分布于全部所有的核心上。
示例:被命名为“enp1s0f0” 和 “enp1s0f1”的网卡:
[root@golem ~]# 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@golem ~]# tuned-adm list - balanced - desktop - latency-performance - network-latency - network-throughput - powersave - throughput-performance - virtual-guest - virtual-host Current active profile: throughput-performance
不同的默认配置都有响应的良好的文档,如果你希望的话,它们是你进行定制的一个好的起点。
其在物理机器上的默认配置为“吞吐性能” 或者 “各项均衡”, 而虚拟机上则是“虚拟来宾用户”。
tuned 的默认配置位于 /usr/lib/tuned 目录下。
[root@golem ~]# 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 的文件语义,还有一个可选的 shell 脚本。
要创建你自己的配置,可以复制其中一个目录到 /etc/tuned/, 做一些调整然后启用就行了。
[root@golem ~]# cp -a /usr/lib/tuned/throughput-performance /etc/tuned/wonderprofile [root@golem ~]# vim /etc/tuned/wonderprofile/tuned.conf [root@golem ~]# 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 能源管理指南》
在性能调优方面,可以让你从昂贵的服务器上获得更多的性能方面的好处,可以看看《Red Hat Enterprise Linux 7 性能调优指南》
用千分尺来进行测量
用粉笔来做标记
用斧头来砍