用户登录
用户注册

分享至

RedHat 性能调优指南

  • 作者: 踏过荆棘
  • 来源: 51数据库
  • 2020-08-16

性能调优是为了提高系统的性能,减少能量的使用或者是减轻应用对其他部分的影响。如果贸然的调优,或者没有任何测量,当然性能调优也许会有不好的影响。

但是系统性的性能调优比专注一点调优更加科学。

方法

首先弄清楚“正常的”状态是什么。

寻找潜在的性能问题,通过调节性能参数来解决这些问题。调整后看看系统怎么样,然后决定保持调整还是回滚。

总结:

  1. 首先收集数据找准方向。
  2. 启动调优,并选择一个合理的默认值
  3. 看看结果,我们的选择是否正确?然后,提交或回归。
  4. 找出潜在的性能问题。
  5. 调整调优参数
  6. 回到第第三步

开始之前,先设定标准

之前和之后的度量

由于有了特定的度量,在改变之前和之后使用“压力测试”很快就可以为你的应用设定标准。可以看看使用 Apache Jmeter 进行压力测试的文章,是关于早期的 sysadvent 日历的例子。

水平度量

如果你可以使用图表进行水平资源监视。即使在自动化分析的今天,以前的 Mk1 Eyeball 仍然是非常有用的,为此,你需要的是图表,而不是满屏的数据。

(当然,你可以把这些图表给你的老板看看,免得他们觉得你在公司吃闲饭)

你应该用图形化的方式来查看所提供的服务上的使用情况和响应时间。针对 web 服务器,指标就应该是请求的数量,每次请求响应的时间,还有每次响应消息的大小。

对于 apache 和 nginx,看看《在 apache 和 nginx 中进行日常日志记录工作》,这篇文章描述了如何将必要的量化指标数据记录日志。

你应该以图形化的方式描述其所使用的资源的使用情况,队列和响应时间。这常常意味着针对磁盘和网络 IO 的资源图。以图形化的方式描述每秒的请求数,还有请求-响应的延迟。

用于图形化展示的工具

我个人喜欢用 Munin。这个工具可以在 EPEL 仓库找到。这个工具绝对称得上“老式的”,但它非常容易上手,而且它还有非常丰富的插件可供使用。在你安装使用 Munin 上,它会默认安装许多图形化工具。如果你需要更多的图形化插件,你可以在 contrib 仓库上找到它们。

对于一些更先进的监控工具,Elasticsearch,Logstash 和 Kibana 在日志分析和可视化展示方面更受欢迎。设置 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

不同的默认预置配置有着健全的文档,而且如果你想自定义的话,有初始配置文件可供使用。

在物理机上默认的预置配置是“throughput-performance“或者”balanced“,在虚拟机上的默认预置配置是”virtual-guest“。

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 文件语义格式和一个可选的脚本解释器。

如果想生成一个自定义的配置文件,你可以拷贝这些目录上的一个到 /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 Power Management Guide。

对于性能调优,想使你的昂贵的服务器焕发更多的活力,参见 Red Hat Enterprise Linux 7 Performance Tuning Guide。

”用微米测量,却用粉笔标记,用斧子切割“ (警醒:不能犯这样的错误。)

软件
前端设计
程序设计
Java相关