Ubuntu 服务器 10.04.1 x86
我有一台在 nginx 后面带有 FCGI HTTP 服务的机器,它为许多不同的客户端提供许多小的 HTTP 请求。(高峰时段每秒大约 230 个请求,平均响应大小为 650 字节,每天有数百万个不同的客户端。)
结果,我有很多套接字,挂在 TIME_WAIT 中(使用下面的 TCP 设置捕获图表):

我想减少套接字的数量。
除了这个我还能做什么?
$ cat /proc/sys/net/ipv4/tcp_fin_timeout 1 $ cat /proc/sys/net/ipv4/tcp_tw_recycle 1 $ cat /proc/sys/net/ipv4/tcp_tw_reuse 1
更新:有关机器上实际服务布局的一些详细信息:
客户端-----TCP-socket--> nginx(负载均衡器反向代理)
-----TCP-socket--> nginx (worker)
--domain-socket--> fcgi-software
--single-persistent-TCP-socket--> Redis
--single-persistent-TCP-socket--> MySQL (其他机器)
我可能应该切换负载平衡器 --> 工作线程连接到域套接字,但关于 TIME_WAIT 套接字的问题仍然存在——我计划很快在单独的机器上添加第二个工作线程。在这种情况下将无法使用域套接字。
在许多关于 ntpd 的入门读物中,像这本一样,总有一个警告说 ntpd 将停止重置时钟“[如果] 你的时钟太远了。”
“离得太远”有多远?
此外,如果服务器突然跳到重负载,例如从完全空闲到 100% CPU,温度升高是否会导致时钟偏差“太远”?
即使时间“太远”或至少使“太远”更远,ntpd 是否可以配置为重置时钟?
更正:响应时间 ( %D) 是 ?s 不是 ms!1
这并没有改变这种模式的怪异之处,但这意味着它实际上没有那么严重的破坏性。
为什么响应时间与请求频率成反比?
当服务器处理请求不那么忙时,它不应该响应更快吗?
任何建议如何让 Apache“利用”较少的负载?
这种模式是周期性的。这意味着如果展示次数低于每分钟约 200 个请求,它就会显示出来——这种情况从深夜到清晨发生(由于自然的用户活动)。
请求是非常简单的 POST,发送少于 1000 个字符的 JSON——这个 JSON 被存储(附加到一个文本文件)——就是这样。答案只是“-”。
图中显示的数据是用 Apache 本身记录的:
LogFormat "%{%Y-%m-%d+%H:%M:%S}t %k %D %I %O" performance
CustomLog "/var/log/apache2/performance.log" performance
Run Code Online (Sandbox Code Playgroud) 在 linux 下使用很少 cpu 的高平均负载的通常解释是 IO 过多(或更恰当地说是不间断的 sleep)。
我有一个服务在 2 核 VM 集群上运行,该集群表现出适度的 CPU 使用率(~55-70% 空闲),但高于 2 平均负载,同时体验接近零的 IO、适度的上下文切换和无交换。轮询ps我从未D在进程状态列中看到。
该服务是在 unicorn 下运行的 ruby 1.9。它连接到两个上游 postgres 数据库,这些数据库提供非常快的 avg 语句执行(~0.5ms)。该服务记录的已用请求持续时间大约是它在我们的性能测试网络上更高压力负载下所显示的两倍。唯一看起来不正常的监控信号是平均负载(当然还有平均响应持续时间),其他一切(cpu、内存、io、网络、cswitch、intr)都是标称和匹配的预测。
系统是 Ubuntu 10.04.4 LTS“Lucid”。uname 是Linux dirsvc0 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux. 管理程序是 VMWare ESX 5.1。
更新:@ewwhite 要求的更多信息。存储是映射到连接到 NetApp 的 vm 主机上的 NFS 装载的虚拟磁盘设备。我要指出的是,所有迹象都表明没有发生重大的磁盘 IO。该服务读取和写入网络套接字(~200KB/s)并进行普通访问和错误记录(速度约为 20KB/s)。vm 主机有一对千兆端口,连接到两个顶部机架交换机,每个交换机都将四个千兆端口绑定回核心路由器,全是铜线。每个 vm 主机具有 24 (4x6) 个物理内核和 150GB 内存,通常托管大约 30 个运行各种不同服务的类似大小的 vm 来宾。在生产中,这些主机永远不会在内存上过度使用,而只是在 cpu …
有什么关于什么时候应该使用roundrobin和什么时候使用的建议leastconn吗?
我roundrobin目前正在使用并观察到我的后端服务器的负载分布不均匀。当然可能还有其他问题,但我们想leastconn尝试一下,但由于它是一个关键任务服务器,我想在进行更改之前咨询其他经验。
有什么想法可以分享吗?
在过去的一周里,我的负载激增。这通常每天发生一次或两次。我已经设法从 iotop 确定 [jbd2/md1-8] 正在使用 99.99% IO。在高负载期间,服务器没有高流量。
服务器规格为:
除了尖峰,负载通常最多在 0.80 左右。
我四处搜索,但找不到 [jbd2/md1-8] 究竟做了什么。有没有人遇到过这个问题或者有没有人知道可能的解决方案?
谢谢你。
更新:
TIME TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
16:05:36 399 be/3 root 0.00 B/s 38.76 K/s 0.00 % 99.99 % [jbd2/md1-8]
Run Code Online (Sandbox Code Playgroud) 为了避免 rsync 使我们ionice在启动 rsync 和设置--bwlimit参数时使用的系统和网络饿死。例如:
ionice -c2 -n7 rsync -aH --bwlimit=30000 /foo root@dest.com:/
Run Code Online (Sandbox Code Playgroud)
这确实有助于确保源服务器保持响应。但是,由于磁盘 io 为 100%(如atop实用程序所见),目标服务器变得非常慢。
是否也可以ionice在目标服务器上以某种方式使用?也许通过 rsync-e选项?如果可能,我不想运行 rsync 守护进程。
我在 java 进程和 nrpe 检查方面遇到了一些问题。我们有一些进程有时会在 32 核系统上使用 1000% 的 CPU。系统非常敏感,直到您执行
ps aux
Run Code Online (Sandbox Code Playgroud)
或者尝试在 /proc/pid# 中做任何事情,比如
[root@flume07.domain.com /proc/18679]# ls
hangs..
Run Code Online (Sandbox Code Playgroud)
一串ps
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0
stat("/dev/pts1", 0x7fffb8526f00) = -1 ENOENT (No such file or directory)
stat("/dev/pts", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
readlink("/proc/15693/fd/2", "/dev/pts/1", 127) = 10
stat("/dev/pts/1", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
write(1, "root 15693 15692 0 06:25 pt"..., 55root 15693 15692 0 06:25 pts/1 00:00:00 ps -Af
) = 55
stat("/proc/18679", …Run Code Online (Sandbox Code Playgroud) 我是负载平衡的新手,我想知道是否可以使用多个负载平衡器将流量重定向到我的应用程序服务器。我真的不明白这是怎么做到的。域名不应该与某个服务器的 IP 地址(在这种情况下是一个负载均衡器的 IP)一一匹配吗?如果每个负载均衡服务器的 IP 不同,那么两个负载均衡器(或 10 个负载均衡器或 50 或 100 个)如何接收请求?
我有一个带有 nginx 的小型 VPS 设置。我想从中榨出尽可能多的性能,所以我一直在尝试优化和负载测试。
我正在使用 Blitz.io 通过获取一个小的静态文本文件来进行负载测试,并遇到一个奇怪的问题,即一旦同时连接的数量达到大约 2000,服务器似乎正在发送 TCP 重置。我知道这是一个非常大量,但使用 htop 后,服务器在 CPU 时间和内存方面仍有大量空闲时间,所以我想找出这个问题的根源,看看我是否可以进一步推动它。
我在 2GB Linode VPS 上运行 Ubuntu 14.04 LTS(64 位)。
我没有足够的声誉直接发布此图表,因此这里是 Blitz.io 图表的链接:

以下是我为找出问题根源所做的工作:
worker_rlimit_nofile设置为 8192nofile设置为64000为硬性和软性限制root和www-data用户(什么nginx的运行为)/etc/security/limits.conf没有任何迹象表明有任何问题/var/log/nginx.d/error.log(通常,如果您遇到文件描述符限制,nginx 会打印错误消息,这样说)
我有 ufw 设置,但没有速率限制规则。ufw 日志表明没有任何内容被阻止,我尝试禁用 ufw 并得到相同的结果。
/var/log/kern.log/var/log/syslog我已将以下值添加到/etc/sysctl.conf并加载它们sysctl -p,但没有任何效果:
net.ipv4.tcp_max_syn_backlog = 1024
net.core.somaxconn = 1024
net.core.netdev_max_backlog = 2000
Run Code Online (Sandbox Code Playgroud)有任何想法吗?
编辑:我做了一个新的测试,在一个非常小的文件(只有 3 个字节)上增加到 3000 个连接。这是 Blitz.io 图表:

同样,根据 …