我注意到我的 CentOS 5.x 虚拟机上的磁盘读/写速度间歇性变慢。
有时 hdparm 会报告:
/dev/sda3:
Timing buffered disk reads: 6 MB in 3.03 seconds = 2.04 MB/sec
Run Code Online (Sandbox Code Playgroud)
其他时候,它会报告:
/dev/sda3:
Timing buffered disk reads: 80 MB in 3.53 seconds = 22.34 MB/sec
Run Code Online (Sandbox Code Playgroud)
我倾向于怀疑 VMWare 主机系统负担过重,但在向 VMWare 管理员提出此问题之前,我想排除任何其他特定于操作系统的可能导致此行为的情况。
我可以运行任何其他区域或测试吗?任何类型的虚拟机/操作系统损坏都会导致此类行为吗?重建/更换虚拟机有帮助吗?
我正在运行安装在一台服务器上的 LAMP 应用程序,每月愉快地提供大约 100 万个 PI。现在我正在寻找潜在的合作伙伴关系,我的应用程序可能每月处理大约 50-80M 的请求。
因此图像由 static.domain.com 提供,而应用程序由 www.domain.com 提供。90% 流量来自的 API 位于单独的 https 域 api.domain.com 下,但查询 mysql 和 solr 堆栈。
一台配备 128GB RAM 和 SSD 的 SW-Raid 1 根服务器是否能够处理这种负载?大多数请求将违背 solr 并仅提供 json 提要,可能不会命中“光盘”。
这对于 128GB 的 RAM 来说是不是太过分了,还是一台服务器甚至无法处理该负载?我也可以使用 2 个服务器和负载平衡。问题是如何在这个架构中。
感谢您对此的任何提示。
我尝试使用 PHP 连接到 MySql 服务器,建立连接平均需要 2 秒。
我们在德国(法兰克福)托管我们的数据库,在新加坡托管 PHP 应用程序。
我们托管在 AWS 上。我们的数据库服务器是一个 RDS 多可用区实例 (db.m4.2xlarge)。
目前连接是通过公共互联网。
一个解决方案是为数据库创建一个主/主复制,但这在 AWS 上并不容易,而且对于当前的用例,它有点过度设计。
有什么办法可以减少延迟吗?通过 VPN 建立连接是否更快?
我有 2 台服务器位于运行 Ubuntu 16.04 的机架中,它们之间有 1 米长的以太网电缆,都具有标准的英特尔以太网适配器。
两者ping之间大约是300 us(微秒)。
这是我在大多数千兆以太网设置中看到的标准延迟。
但是与理论限制相比,这种延迟似乎仍然很高;为什么?我读过 1 GbE 可以实现 40 us 的延迟。
这是我可以预期的最小延迟,还是我可以执行软件调整来减少这种延迟?瓶颈是什么?是Linux吗?在这个适用于 Windows的游戏玩家网站上,屏幕截图中的工具在大多数情况下似乎表明延迟为 40 us,但这对我的 Linux 服务器并没有多大帮助。
(如何)我可以让我的ping40 个我们?
编辑:在寻找的截图再次,它可能是我们出的40是不实际的往返时间,但它实际上是Windows内核中的特定的延迟,因此40我们可能只是部分的总往返时间,这可能更高,未列出。这也符合这里的答案。
(我最初是在超级用户处问这个问题的;此时我不清楚 ServerFault 是一个更合适的社区来询问网络性能问题,而且我在那里没有足够的声誉来提出这个问题,所以我重新提出在这里。我也将硬件切换到服务器硬件。)
我提供了一个 wordpress 博客,其中 nginx http 缓存到超过 99% 的请求,缓存寿命为 2 天。这是该网站的网页。网页有很多图像,因此延迟加载。页面的平均大小仅为 1 mb。
平均响应大小为 10 KB
使用速度曲线时,我的 TTFB 中位数为 0.6 秒
为什么这么高?
我支持 cloudflare,所有静态资产(如 JS、CSS 和图像)都从 cloudflare 进行版本控制和缓存。
我的 nginx 配置有
sendfile on;
# https://forum.nginx.org/read.php?2,280434,280434#msg-280434
tcp_nopush on;
tcp_nodelay on;
#https://support.cloudflare.com/hc/en-us/articles/212794707-General-Best-Practices-for-Load-Balancing-at-your-origin-with-Cloudflare
#https://www.nginx.com/blog/tuning-nginx/
keepalive_timeout 300s;
keepalive_requests 10000;
Run Code Online (Sandbox Code Playgroud)
我也有
initcwnd 设置为 10,initrwnd 10 和 ipv4.tcp_slow_start_after_idle=0
这是 cloudflare 对从 CF 到源的响应时间的报告

静态网站也在两台机器上进行负载平衡。一个在弗里蒙特,一个在孟买,Cloudflare 做地理路由。
为什么我的 TTFB 这么长,我可以做些什么来减少它?
我正在通过 iperf3 测量 tcp 和 udp 吞吐量。我在虚拟机中运行 iperf3,一台作为服务器,另一台作为客户端。VM 通过 10 Gbps 链路进行连接。结果表明tcp比udp获得更高的吞吐量。然而,正如我们所知,TCP 运行更多的算法和计算,并且还具有三向握手,那么为什么 udp 吞吐量小于 tcp?这与 tcp 和 udp 的缓冲区大小有关吗?下面是 tcp 和 udp 测量的结果。很明显,iperf 在特定时间内为 tcp 发送的数据比 udp 发送的数据多,但为什么呢?
TCP:8.88 Gbps
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 922 MBytes 7.73 Gbits/sec 1 3.04 MBytes
[ 4] 1.00-2.00 sec 1.04 GBytes 8.92 Gbits/sec 0 3.04 MBytes
[ 4] 2.00-3.00 sec 1.07 GBytes 9.15 Gbits/sec 0 3.04 MBytes
[ 4] 3.00-4.00 sec 1.05 GBytes 8.99 Gbits/sec 0 …Run Code Online (Sandbox Code Playgroud) 我有一个带有 6 个 SSD 的服务器和一个支持 RAID 10 和 RAID 50 的 RAID 控制器卡,计划将其用作我们的构建服务器。它将拉入 NPM 包和许多小代码文件,编译和上传人工制品。
我们目前有一台服务器正在执行此操作,并且它正在运行 IO 瓶颈(它使用当前在 RAID1 配置中的非 SSD 驱动器)。
对于性能而言,RAID 50 和 RAID 10 中哪种 RAID 配置最适合?
从用例来看,IO 将主要是小文件的写入(随机写入)。磁盘空间和正常运行时间不是主要问题,因为我们有故障转移并且重建服务器很简单。所以我不关心在关闭阵列等之前有多少驱动器故障,唯一的考虑是性能。
RAID0 已被官僚机构排除在外。
我想真正的问题是奇偶校验的计算是否比总是写入同一个镜像磁盘花费的时间更长?
我在连接到 IBM Shark 的刀片上使用 SQL Server 数据仓库解决方案时遇到了性能问题。由于页面闩锁等待时间过长,磁盘 I/O 性能似乎异常缓慢。其他从事基于 SQL Server 的 MIS 项目的人报告了类似的症状,但没有明显的解决方案。我尝试过的一些测试是:
在设置为 RAID-10 的 shevles 上构建部分或全部卷。这没有任何明显的影响。
禁用 SQL Server 上的强制直写行为(这可能是安慰剂 - 见下文)。
没有任何测试对速度产生显着影响,并且系统在具有直接连接的 SCSI 阵列的硬件和 O/S 规范(Windows 2003 服务器 EE)大致相似的机器上的基准测试速度大约是其两倍。在 SAN 上,我有三个卷,每个卷安装了 8 个磁盘(RAID-10 日志、RAID-10 tempdb、RAID-10 数据)。在带有直接附加磁盘的机器上,我有 6 个内部和 14 个外部 10k SCSI 磁盘。
请注意,Shark 有 32GB 的缓存 RAM,这应该足以适应测试的应用程序的工作集。
我调查的一个途径是用于 SAN 存储的 SQL Server 认证程序,其中 SAN 通过强制直写位集来尊重 I/O。我可以找到声称符合此规定的 EMC、HP 和 Hitachi SAN 的文档,但找不到关于 Shark 的此类文献。
有没有人在 Shark 上遇到过类似的性能问题——如果有的话,你对此有什么见解吗?
我准备设置一个服务器,负责跟踪来自大量流量源的统计数据。它将以平均每小时 6-7 百万的速度处理请求,所有这些都是小的 GET。我所需要的只是一个简单的服务器设置,它可以处理 get 请求的参数并将它们写入 CSV 文件。
我的第一个想法是使用 lighttpd+fastcgi+php,因为这是我已经熟悉的配置。但是,鉴于我不能每天都做出这些类型的性能决定,我想探索一些其他选项,看看是否有更好的方法可以达到这个目的。
基本上我想知道是否可以通过使用像鱿鱼这样的缓存来加速我的服务器,检查配置中可能的错误,优化各种服务器软件参数等。
如果我知道服务器的 ping 时间和时钟速度以及其他硬件参数,是否可以预测提供 1MB 数据的时间。
例如,在我的情况下,我有 1GHz AMD 和 75ms ping,我在 0.6 秒内从核心内存获得 16 kB 页面 - 我可以让它更快吗?-只是在无负载时显示页面的简单时间。
是否存在用于此目的的任何基准/工具?
编辑我试过添加鱿鱼,但根本没有获得任何性能提升。
谢谢。
performance ×10
latency ×2
linux ×2
bandwidth ×1
benchmark ×1
bottleneck ×1
centos ×1
ethernet ×1
hard-drive ×1
http-caching ×1
io ×1
iperf ×1
lamp ×1
lighttpd ×1
memory ×1
mysql ×1
networking ×1
nginx ×1
optimization ×1
ping ×1
raid ×1
raid10 ×1
scalability ×1
sql-server ×1
tcp ×1
udp ×1
write ×1