请记住一个要点:在安装全新的 AIX 6 或 7 时,会自动地设置新的内存可调项默认值。如果是从 AIX 5.3 迁移系统,那么在 AIX 5.3 中设置的所有可调项会随同迁移。在执行迁移之前,建议记录已经修改的所有可调项(取得 /etc/tunables/nextboot 的拷贝),然后把可调项恢复为默认值。在迁移之后,检查 nextboot 并确保其中没有任何内容。现在,讨论需要为 AIX 6 或 7 修改的可调项。

磁盘 I/O

许多最常见的性能问题与 I/O 问题相关。尤其是,与管理员可以设置的任何 I/O 可调项相比,数据布局对性能的影响更大。因为以后更改数据布局非常困难,所以通过提前计划避免这些问题是很重要的。

目前的行业趋势是为服务器配置更少但更大的 hdisk。例如,服务器可能配置一个 500 GB 的 hdisk,它分散在磁盘子系统中的几个磁盘上,而不是配置 10 个 50 GB 或 5 个 100 GB 的磁盘。但是,I/O 性能取决于带宽而不是大小。即使数据分散在后端的多个磁盘上,这对于前端的 I/O 排队问题也没有帮助。在服务器上,hdisk 驱动程序有一个正在处理队列和一个等待队列。在 JFS2 缓冲区中建立 I/O 时,它排队访问 LUN (hdisk)。hdisk (LUN) 的 queue_depth 表示它在任何时刻能够承担的 I/O 数量。

hdisk 的正在处理队列可以包含最多 queue-depth 个 I/O,hdisk 驱动程序把这些 I/O 提交给适配器驱动程序。这为什么很重要?如果 LVM 把您的数据分散在 5 个 hdisk 上,那么就可以同时处理更多 I/O。对于单一大 hdisk,就要排队。子系统设备驱动程序 (subsystem device driver,SDD) 等多路径 I/O 驱动程序向 hdisk 提交的 I/O 不会多于 queue_depth 个,这会影响性能。需要提高 queue_depth 或者禁用此限制。在 SDD 中,使用 "datapath qdepth disable" 命令。

一些厂商在 queue_depth 设置方面做得比较好,但是如果要使用后端中多个磁盘上的大量逻辑单元,仍然需要提高设置。可以使用 iostat -D 或 sar -d 命令检查排队情况。交互式 nmon 也有 -D 选项,可以用它监视 sqfull。如果使用 sddpcm,那么可以使用 "pcmpath query devstats" 监视 sqfull,使用 "pcmpath query adaptstats" 监视适配器排队。

尤其是要查看 avgsqsz、avgwqsz 和 sqfull 字段,以此判断是否需要提高 queue_depth。不要把 queue_depth 提高到超过磁盘厂商建议的范围。lsattr -El hdisk? 显示当前的 queue_depth 设置。修改 queue_depth 之后需要重新引导。

对于 Fibre Channel,适配器也有正在处理队列,可以包含最多 num_cmd_elems 个 I/O。适配器把这些 I/O 提交给磁盘系统并使用直接内存访问 (DMA) 执行 I/O。可能应该考虑修改适配器上的两个设置。在默认情况下,num_cmd_elems 设置为 200,max_xfer_size 设置为 0x100000。后者相当于 16 MB 的 DMA 大小。对于沉重的 I/O 负载,我会把 DMA 提高到 0x200000 (128 MB) 并把 num_cmd_elems 设置为 2,048,但是我一般先设置为 1,024。这必须在分配 hdisk 之前完成,否则必须删除它们才能设置这些值。lsattr -El fcs? 显示当前设置。修改这些设置之前,请咨询您的磁盘厂商。可以使用 fcstat 命令监视这些设置。应该查看以下条目:

FC SCSI Adapter Driver InformationNo DMA Resource Count: 0               No Adapter Elements Count: 2567

No Command Resource Count: 34114051

在上面的输出中可以看出 num_cmd_elems 不够高,DMA 区域也需要增加。修改这些设置之后需要重新引导。

在使用 VIO 服务器时,应该在 VIO 服务器上设置 max_xfer_size 和 num_cmd_elems;如果使用 N_Port ID Virtualization (NPIV),还需要在 NPIV 客户机 LPAR 上设置它们。在 NPIV 客户机 LPAR 上设置的值不要高于 VIO 服务器;我这样做过并导致我的 LPAR 无法引导,因此这么做肯定是超越限制了。

回页首

卷组和文件系统

正确地设置 Fibre-Channel 卡和 hdisk 之后,应该查看卷组、逻辑卷 (LV) 和文件系统的设置。我尽量使用包含多个磁盘的少量卷组,因为这样可以更灵活方便地使用镜像技术转移文件系统。这让我可以在不停机的情况下在磁盘之间转移文件系统。我见过每个文件系统一个卷组的设置,这对解决性能问题时的灵活性没好处。

回页首

异步和并发 I/O

异步 I/O (AIO) 是在 OS 级上设置的,Oracle 需要知道已经配置了 AIO。AIO 用于提高原始 LV 和文件系统的 I/O 性能。在 AIX 5.3 和 AIX 6.1/7 上设置 AIO 的方法不一样。在 5.3 上,使用 chdev 设置三个参数:minservers、maxservers 和 maxreqs。在 6.1 和 7 上,使用 ioo。如果在 6.1/7 系统上执行 "ioo -a | grep aio",就会看到新的参数。使用 "iostat -A" 命令收集统计数据。可以通过这些数据看出正在使用多少个 AIO。另外,如果看到 maxg 接近 maxreqs,那么应该提高 maxreqs。

在 6.1 和 7 上,现在默认装载 AIO 修改和子系统。aio0 设备和新的 aioo 命令取消了。另外,在默认情况下启用 AIO,需要调整的值通常只有 aio_maxservers 或 posix_aio_maxservers 选项。这用 ioo 命令来设置。

并发 I/O (CIO) 是 JFS2 采用的 AIX 特性,它绕过缓冲区缓存,可以减少双重缓冲(即把 I/O 存储到内存中,然后复制到应用程序缓冲区中)。CIO 还会取消写操作期间文件系统的 inode 锁,所以应该只在由应用程序负责数据序列化的情况下使用它。对于 Oracle,这意味着应该对 DataBase file (DBF)、重做日志、控制文件和 flashback 日志文件使用 CIO。对于 Oracle 二进制代码或存档日志文件不应该使用它。对于混合型或随机访问的工作负载,使用 CIO 会对内存使用量(减少分页)、CPU 使用率(不再在两个内存位置之间复制内存页面)和总体性能产生显著影响。但是,因为它绕过提前读取,顺序操作的性能可能不好。

回页首

网络

在图 1 中,提供对设置网络可调项的建议。这些建议针对 Gbit 网卡。在 netstat -v 输出中,寻找溢出和内存分配失败等错误。例如,如果出现 "Software Xmit Q Overflows",就说明数据包溢出适配器上的传输队列。溢出的另一个迹象是数据包由于内存分配失败被丢弃。要想查明调用的传输队列,需要运行 "lsattr -El ent0"(或 ent1 ....)命令。这个字段从 AIX 5.3 到 6 到 7 一直在增加,还因适配器是 100 Mb、1Gb 或 10Gb 而异。

图 1. 网络可调项的建议

在设置网络可调项时,应该使用 no 执行全局设置,但是还需要检查各个适配器,因为系统可以覆盖全局设置。使用 "ifconfig -a" 检查设置的网络参数是否被覆盖了。如果 ifconfig 输出中的值比较小,那么考虑使用 ifconfig 把它们设置为新的值。

另一个要考虑的网络可调项是 tcp_nodelay,它在默认情况下是禁用的。对于只发送很少的数据并等待响应的请求/响应工作负载,这会造成很长的延迟。TCP 实现延迟的确认,因为它期望通过响应数据包发送回 TCP 确认。这个延迟通常为 200 ms。为了减少这个延迟,应该启用 tcp_nodelay。使用 no 命令启用它。

回页首

收集性能数据

我多年使用 nmon 收集历史性能数据并监视系统。现在,nmon 已经集成在系统中了,所以我使用 IBM 提供的 nmon 并在每天午夜启动一个新的 cron 作业。它运行的脚本包含以下代码:

#!/bin/ksh
#
cd /usr/local/perf
/usr/bin/nmon -ft -A -M -L -^ -s 150 -c 576
#

上面的脚本收集 24 小时的系统信息,包括 AIO、大页面和最忙的进程。然后可以下载产生的 .nmon 文件,使用 nmon analyzer、nmon consolidator 和其他许多工具(包括 rrd)处理数据。

回页首

简单的修改,重大的影响

AIX 6 和 7 大大减少了需要关注的内存可调项数量。但是,仍然需要注意 I/O 缓冲区、总体 I/O 和网络调优。简单的修改可能对系统产生重大的影响,所以应该全面测试再投入生产,但是在许多情况下上面提供的建议应该有助于提高性能。

磁盘 I/O 和网络相关推荐

  1. JAVA 线上故障排查套路,从 CPU、磁盘、内存、网络到GC 一条龙!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数 ...

  2. JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:fredal https://fredal.xin/java ...

  3. 从 CPU、磁盘、内存、网络、GC 一条龙!JAVA 线上故障排查完整套路

    线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍.同时例如jstack.jmap等工具也是不囿于一个方面的问题的,基 ...

  4. 性能优化CPU、内存、磁盘I/O、网络性能相关命令

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  5. 将访问的文件夹变为磁盘盘符-摘自网络

    将经常访问的文件夹变为磁盘符,可以大大方便对它的操作,难道你不想如此吗?那么,笔者以下所述将让你的愿望变为现实. 将本地文件夹变为磁盘 要将经常访问的本地磁盘文件夹变为磁盘,可以使用DOS的Subst ...

  6. 磁盘读写流程和网络读写流程

    一 页缓存(page cache) 和 套接字缓冲区(socket buffer) 1.1 页缓存(page cache) 1.1.1 什么是页缓存? 为什么需要页缓存? 当应用程序要读取磁盘上的文件 ...

  7. LINUX查看系统、资源、磁盘和分区、网络、进程、用户

    系统 # uname -a                      # 查看内核/操作系统/CPU信息  # head -n 1 /etc/issue   # 查看操作系统版本 # cat /pro ...

  8. Linux查看服务器内存、磁盘、cpu、网络占用、端口占用情况

    1.查看物理CPU个数:cat cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l 2.查看服务器CPU内核个 ...

  9. 给你的Linux把把脉(内存、磁盘、CPU、网络)

  10. ❤️ 给你的Linux把把脉(内存、磁盘、CPU、网络)❤️

最新文章

  1. Linux配置nodejs
  2. php与mysql字符集,php与mysql字符集编码问题
  3. SQL进阶教程 | 史上最易懂SQL教程 5小时零基础成长SQL大师
  4. 计算机大端模式和小端模式 内存对齐问题(sizeof)
  5. linux nginx mysql php 5.5._搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
  6. gojs实现最短路径寻址实例
  7. svn: E200033: database is locked, executing statement 'RELEASE   s0' 问题解决办法
  8. 熟悉 ASP.NET MVC 类
  9. 小马源码_Java互联网架构-重新认识Java8-HashMap-不一样的源码解读
  10. 15-07-08 数组-- 投票选班长
  11. python ssh模块_python ssh之paramiko模块使用
  12. Axure RP 8.0安装和汉化
  13. 在SPSS中使用广义估算方程对非独立相关数据进行分析的方法
  14. 索尼相机手机控制对焦,操控指南丨 使用索尼微单的十个小技巧
  15. 【组合优化】旅行商问题Traveling Salesman Problem(TSP)-概述
  16. source insight 4.0 的一些设置
  17. 16岁初中生开发的软件,强大到令人发指!
  18. 医疗器械软件测试相关
  19. [搜索算法]三分搜索初步
  20. 【k8s的持久化存储】PV、PVC、StorageClass讲解

热门文章

  1. matlab语言中的[~,b]=sort(A)用法介绍
  2. python tkinter 按钮 Button增加图片
  3. 如何用Python + baidu-aip 实现人脸识别?
  4. handsome for Typecho主题重建备忘
  5. “特殊疑问词+动词不定式”的用法归纳
  6. 计算机桌面计划,电脑桌面日程安排软件
  7. 洛谷 P3604 美好的每一天
  8. python多变量相关性分析_多变量相关性分析(一个因变量与多个自变量)
  9. Oracle | 初级-第二章 Oracle安装配置
  10. 黑暗城堡(dijkstra算法)