🔗 性能分析 Squid 服务器
Squid 运行速度太慢了吗?您想弄清楚原因并帮助我们提高 Squid 的性能吗?这里有一些建议。
🔗 我应该关注什么?
简而言之:一切。磁盘 I/O、内存使用、CPU 使用、网络使用。您需要掌握您的设备的能力并找出哪些方面出了问题。这不需要太多练习,所以别太担心!
🔗 CPU 使用情况
Squid 是一个 CPU 密集型应用程序(毕竟,它花费所有时间处理传入数据并生成要发送的数据)。但有许多不同类型的 CPU 使用情况可以帮助您识别您正在耗尽的资源。
- 用户空间 CPU 时间:这是 Squid 进程本身花费的 CPU 时间。
- 内核空间 CPU 时间:这可能与任何与内核相关的内容有关,但通常反映了非设备内核处理。例如,磁盘和网络 I/O 的排队/出队、文件系统处理和一些网络层处理。
- 中断空间 CPU 时间:这通常是 CPU 处理物理设备(磁盘和网络)的时间。对于编程良好的设备驱动程序和运行正常的硬件,您通常应该在中断空间花费很少的时间。但是,事情并非总是运行正常的。
- IOWAIT CPU 时间 - 据我所知,这在 Linux 中比较常见,它反映了 CPU 等待 I/O 完成的时间。这通常是因为您的设备需要比完成任务所需更多的关注。
🔗 资源使用情况
常用的 UNIX 工具 vmstat 和 iostat 可以让您初步了解当前的服务器资源使用情况。vmstat 通常会显示与内存使用、CPU 使用、设备中断、磁盘 I/O(输入和输出)以及系统分页量相关的信息。iostat 可以让您深入了解每个物理磁盘上安排的 I/O 操作。
我通常运行 vmstat 1 和 iostat 1 来关注这些情况。您还应该考虑设置图形化来跟踪各种资源变量并观察使用趋势。
🔗 哪些因素会影响我的 Squid 性能?
如果您耗尽了任何服务器资源,Squid 的性能就会开始下降。有几件事经常发生:
- 您直接耗尽了 CPU。这是指除了内核和用户 CPU 使用外,您所有资源都处于低位。这可能是因为您仍然使用 poll() 或 select() 进行网络 I/O,而这些在现代负载下无法很好地扩展。
- 一些低质量的硬件(如慢速 IDE 磁盘和非常便宜的网络卡)在传输数据方面不太好,需要 CPU 大量介入。如果您看到中断/IOWAIT 时间增加,这可能与您的硬件选择有关。我见过这种情况发生在桌面级硬件冒充服务器时——例如,运行 Linux 并使用 SATA 磁盘的 Sun“桌面”硬件。大量的磁盘 I/O == 大量花费在 IOWAIT 上。
- 一些硬件允许您调整它对系统的开销。千兆网卡是一个很好的例子。您牺牲几毫秒的延迟来换取高中断负载,但这对于不断处理数据包的服务器来说并不重要。查看您的硬件文档,看看有什么可用的。
- Linux 服务器花费大量时间在 IOWAIT 上也可能是因为您正在使磁盘 I/O 过载。在 vmstat 中查看您的磁盘 I/O 情况。如果您正在使用 UFS,可以考虑切换到 aufs/diskd cache_dir。在重度磁盘负载下,COSS 也可以大大降低 IOWAIT 时间。
- 您正在进行交换!当人们增加 cache_mem 并且不关注 Squid 实际使用了多少 RAM 时,这种情况经常发生。观察 vmstat 的输出,查看有多少可用内存。如果您看到服务器在磁盘之间分页内存,那么您就遇到了麻烦。要么减少 cache_mem,要么增加物理 RAM。
🔗 我如何看到 Squid 实际在做什么?
确定 CPU 使用去向的最佳方法是使用进程或系统分析器。我个人使用 oprofile。gprof 在现代 CPU 时钟速度下根本不准确。还有其他选择——例如,FreeBSD 下的 hwpmc 可以做一些 oprofile 能做到的事情,但它目前在从 Squid 的用户空间获取任何样本时遇到问题。可恶。如果您在服务器上没有 root 访问权限,perfmon 也是一个选择。
Linux 下的 OProfile 易于使用,并且开销非常低。
这是我使用 oprofile 的方法:
- 安装 oprofile
- 检查可用选项 - opcontrol -l
- 如果您看到一条关于“定时器中断模式”的单行消息,那么您就遇到了麻烦。请阅读 OProfile FAQ,看看是否可以启用 ACPI。在定时器中断模式下,您将无法获得任何有意义的 OProfile 结果。
- 设置它 - opcontrol –setup -c 4 -p library,kernel –no-vmlinux(如果您有 vmlinux 映像,请阅读 opcontrol 手册了解如何告诉 opcontrol 它的位置。)
- 启动它 - opcontrol –start
- 等待几分钟 - 一个繁忙的 Squid 服务器会很快生成大量分析信息!
- 然后使用 opreport -l /path/to/squid/binary 来获取 Squid CPU 使用情况的信息。
请记住:
- 确保您已安装调试库和库符号——在 Ubuntu 上是 'libc6-dbg'。
- 不要尝试在定时器中断模式下使用它,它的准确性问题将与 gprof 和其他基于定时器的分析器类似。
🔗 负载测试工具
对连接和请求限制进行性能分析也很有用。以下是一些用于在各种请求和连接负载下测试行为的工具。
回到 FAQ 索引
导航: 网站搜索、网站页面、分类、🔼 向上