磁盘性能分析

 Physical   Disk/   Disk   Reads/sec   and   Disk   Writes/sec 
  Physical   Disk/   Current   Disk   Queue   Length   
 Physical   Disk/   %   Disk   Time   
LogicalDisk/   %   Free   Space   
Physical Disk/ % Disk Time
Physical Disk/ Avg.Disk Queue Length
例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很

高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
Physical Disk/ % Disk Time
Physical Disk/ Avg.Disk Queue Length
例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很

高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
请观察 Processor/ Interrupts/sec 计数器的值,该计数器测量来自输入/输出 (I/O) 设备的服务请求的速度。如果此计数器的值明显增加,而系统活动没有相

应增加,则表明存在硬件问题。
Physical Disk/ Disk Reads/sec and Disk Writes/sec
Physical Disk/ Current Disk Queue Length
Physical Disk/ % Disk Time
LogicalDisk/ % Free Space
测试磁盘性能时,将性能数据记录到另一个磁盘或计算机,以便这些数据不会干扰您正在测试的磁盘。
可能需要观察的附加计数器包括 Physical Disk/ Avg.Disk sec/Transfer、Avg.Disk Bytes/Transfer,和 Disk Bytes/sec。
Avg.Disk sec/Transfer 计数器反映磁盘完成请求所用的时间。较高的值表明磁盘控制器由于失败而不断重试该磁盘。这些故障会增加平均磁盘传送时间。对于

大多数磁盘,较高的磁盘平均传送时间是大于 0.3 秒。
也可以查看 Avg.Disk Bytes/Transfer 的值。值大于 20 KB 表示该磁盘驱动器通常运行良好;如果应用程序正在访问磁盘,则会产生较低的值。例如,随机访

问磁盘的应用程序会增加平均 Disk sec/Transfer 时间,因为随机传送需要增加搜索时间。
Disk Bytes/sec 提供磁盘系统的吞吐率。
决定工作负载的平衡
要平衡网络服务器上的负载,需要了解服务器磁盘驱动器的繁忙程度。使用 Physical Disk/ % Disk Time 计数器,该计数器显示驱动器活动时间的百分比。如

果 % Disk Time 较高(超过 90%),请检查 Physical Disk/ Current Disk Queue Length 计数器以查看正在等待磁盘访问的系统请求数量。等待 I/O 请求的

数量应当保持在不大于组成物理磁盘的主轴数的 1.5 到 2 倍。
尽管廉价磁盘冗余阵列 (RAID) 设备通常有多个主轴,大多数磁盘有一个主轴。硬件 RAID 设备在“系统监视器”中显示为一个物理磁盘;通过软件创建的 RAID

设备显示为多个驱动器(实例)。可以监视每个物理驱动器(而不是 RAID)的 Physical Disk 计数器,也可以使用 _Total 实例来监视所有计算机驱动器的数

据。

使用 Current Disk Queue Length 和 % Disk Time 计数器来检测磁盘子系统的瓶颈。如果 Current Disk Queue Length 和 % Disk Time 的值始终较高,可以

考虑升级磁盘驱动器或将某些文件移动到其他磁盘或服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分析磁盘的实时性能,可以使用Golang中的os/diskusage和syscall/sysinfo包。以下是使用这些包来分析磁盘实时性能的基本步骤: 1. 导入必要的包: ```go import ( "fmt" "os" "syscall" ) ``` 2. 使用os/diskusage包来获取磁盘使用情况: ```go func getDiskUsage(path string) (available uint64, total uint64, used uint64, err error) { fs := syscall.Statfs_t{} err = syscall.Statfs(path, &fs) if err != nil { return } available = fs.Bavail * uint64(fs.Bsize) total = fs.Blocks * uint64(fs.Bsize) used = total - available return } ``` 3. 使用syscall/sysinfo包来获取系统的负载情况: ```go func getSystemLoad() (loadavg [3]float64, err error) { var s syscall.Sysinfo_t if err = syscall.Sysinfo(&s); err != nil { return } uptime := float64(s.Uptime) loadavg[0] = float64(s.Loads[0]) / (1 << 16) loadavg[1] = float64(s.Loads[1]) / (1 << 16) loadavg[2] = float64(s.Loads[2]) / (1 << 16) return } ``` 4. 编写主函数来定期获取磁盘和系统的使用情况,并输出到控制台: ```go func main() { // 磁盘路径 path := "/" // 定期获取磁盘使用情况和系统负载 for { available, total, used, err := getDiskUsage(path) if err != nil { fmt.Println("Error:", err) } else { fmt.Printf("Disk usage: %d / %d (%d%%)\n", used, total, 100*used/total) } loadavg, err := getSystemLoad() if err != nil { fmt.Println("Error:", err) } else { fmt.Printf("System load average: %.2f, %.2f, %.2f\n", loadavg[0], loadavg[1], loadavg[2]) } // 休眠5秒 time.Sleep(5 * time.Second) } } ``` 这样,你就可以使用以上代码来定期获取磁盘和系统的使用情况,并进行分析和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值