这是一个软件设计问题
我曾经按照以下速度规则工作
cache memory > memory > disk > network
Run Code Online (Sandbox Code Playgroud)
每一步都是前一步的 5-10 倍(例如,高速缓存比主存储器快 10 倍)。
现在,似乎千兆以太网的延迟比本地磁盘少。因此,也许读取大型远程内存数据库的操作比本地磁盘读取快。对于像我这样的老前辈来说,这感觉就像异端邪说。(我只是花了一些时间在磁盘上构建本地缓存以避免必须进行网络往返 - 因此我的问题)
有人在这方面有任何经验/数字/建议吗?
是的,我知道唯一真正的方法是构建和测量,但我想知道一般规则。
编辑:
这是来自顶级答案的有趣数据:
同一数据中心内的往返 500,000 ns
磁盘寻道 10,000,000 ns
这对我来说是一个冲击;我的心智模型是网络往返本质上是缓慢的。它不是 - 它比磁盘“往返”快 10 倍。
Jeff attwood 在http://blog.codinghorror.com/the-infinite-space-between-words/上发布了这个很好的博客
我想调整的FreeBSD的共享知识通过sysctl.conf
/ loader.conf
/ KENCONF
FreeBSD有调整/等它最初是基于伊戈尔Sysoev为的(Nginx的作者)呈现高达10-20万个的有效连接。较新版本的 FreeBSD 可以处理更多。
调整适用于 FreeBSD7 - FreeBSD-CURRENT。从 7.2 amd64 开始,默认情况下,其中一些已经很好地调整了。在 7.0 之前,其中一些仅用于引导(通过 设置
/boot/loader.conf
)或根本不存在。
sysctl.conf
:
# No zero mapping feature
# May break wine
# (There are also reports about broken samba3)
#security.bsd.map_at_zero=0
# Servers with threading software apache2 / Pound may want to rise following sysctl
#kern.threads.max_threads_per_proc=4096
# Max backlog size
# Note Application can still limit it by passing second argument to listen(2) syscall
# Note: Listen queue be monitored …
Run Code Online (Sandbox Code Playgroud) 我需要在两个服务器 (Ubuntu) 之间传输大量 mp3。我所说的巨大是指大约一百万个平均为 300K 的文件。我尝试过,scp
但大约需要一周时间。(大约 500 KB/s)如果我通过 HTTP 传输单个文件,我得到 9-10 MB/s,但我不知道如何传输所有文件。
有没有办法快速转移所有这些?
我是一个代码猴子,越来越多地为我的小公司承担系统管理员的职责。我的代码就是我们的产品,而且我们越来越多地提供与 SaaS 相同的应用程序。
大约 18 个月前,我将我们的服务器从一家以优质托管为中心的供应商转移到了 IV 级数据中心的准系统机架推进器。(字面意思是在街对面。)这个人自己做的事情更多——比如网络、存储和监控。
作为重大举措的一部分,为了取代我们从托管公司租用的直连存储,我构建了一个基于 SuperMicro 机箱、3ware RAID 卡、Ubuntu 10.04、两打 SATA 磁盘、DRBD 和 . 三篇博文详细记录了这一切:构建和测试新的 9TB SATA RAID10 NFSv4 NAS:第一部分、第二部分和第三部分。
我们还设置了一个 Cacit 监控系统。最近,我们添加了越来越多的数据点,例如 SMART 值。
我不能这样做这一切,而不真棒 挤入 在 ServerFault。这是一次有趣且有教育意义的经历。我的老板很高兴(我们节省了大量的美元),我们的客户很高兴(存储成本下降),我很高兴(有趣,有趣,有趣)。
直到昨天。
午饭后一段时间,我们开始从我们的应用程序(一个按需流媒体 CMS)收到性能缓慢的报告。大约在同一时间,我们的 Cacti 监控系统发送了大量电子邮件。一个更有说服力的警报是 iostat await 的图表。
性能变得如此下降以至于 Pingdom 开始发送“服务器关闭”通知。整体负载适中,没有流量高峰。
在登录应用服务器、NAS 的 NFS 客户端后,我确认几乎所有东西都在经历高度间歇性和超长的 IO 等待时间。一旦我跳到主要 NAS 节点本身,在尝试导航问题阵列的文件系统时,同样的延迟很明显。
是时候进行故障转移了,一切顺利。在 20 分钟内,一切都被确认备份并完美运行。
在任何和所有系统故障后,我都会进行事后分析以确定故障原因。我做的第一件事是 ssh 回到盒子里并开始查看日志。它完全离线。是时候去数据中心旅行了。硬件复位,备份并运行。
在/var/syslog
我发现这个可怕的条目:
Nov …
Run Code Online (Sandbox Code Playgroud) 什么内核参数或其他设置控制可以在 Linux 服务器上打开的最大 TCP 套接字数?允许更多连接的权衡是什么?
我注意到在使用ab对 Apache 服务器进行负载测试时,很容易最大化服务器上的开放连接。如果你不使用 ab 的 -k 选项,它允许连接重用,并让它发送超过 10,000 个请求,那么 Apache 会处理前 11,000 个左右的请求,然后停止 60 秒。查看 netstat 输出显示 11,000 个连接处于 TIME_WAIT 状态。显然,这是正常的。出于TCP 可靠性的原因,即使在客户端完成连接后,连接也会保持打开的默认值 60 秒。
这似乎是对服务器进行 DoS 的一种简单方法,我想知道它的常用调整和预防措施是什么。
这是我的测试输出:
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The …
Run Code Online (Sandbox Code Playgroud) 我们在 Web 应用程序上看到了巨大的性能问题,我们正试图找到瓶颈。我不是系统管理员,所以有些东西我不太明白。一些基本调查显示 CPU 处于空闲状态,有大量内存可用,没有交换,没有 I/O,但平均负载很高。
此服务器上的软件堆栈如下所示:
在此服务器上运行的应用程序与另一台服务器上的 Oracle 数据库进行通信。
这台服务器有 32GB 的 RAM 和 10 个 CPU(我认为)。
运行prstat -Z
给出了这样的东西:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
3836 ducm0101 2119M 2074M cpu348 58 0 8:41:56 0.5% java/225
24196 ducm0101 1974M 1910M sleep 59 0 4:04:33 0.4% java/209
6765 ducm0102 1580M 1513M cpu330 1 0 1:21:48 0.1% java/291
16922 ducm0102 2115M 1961M sleep 58 0 6:37:08 0.0% java/193
18048 …
Run Code Online (Sandbox Code Playgroud) 我的服务器可以接受()新传入 TCP 连接的速率在 Xen 下非常糟糕。对裸机硬件的相同测试显示速度提高了 3-5 倍。
最近,我一直在研究在 Xen 下运行的内部开发的 Java 服务器的一些性能瓶颈。服务器使用 HTTP 并回答简单的 TCP 连接/请求/响应/断开连接调用。
但即使在向服务器发送大量流量时,它每秒也不能接受超过 7000 个 TCP 连接(在 8 核 EC2 实例上,运行 Xen 的 c1.xlarge)。在测试期间,服务器还表现出一种奇怪的行为,其中一个内核(不一定是 cpu 0)负载超过 80%,而其他内核几乎保持空闲。这让我认为问题与内核/底层虚拟化有关。
在裸机、非虚拟化平台上测试相同场景时,我得到的测试结果显示 TCP accept() 速率超过 35 000/秒。这是在运行 Ubuntu 的 Core i5 4 核机器上,所有内核几乎完全饱和。对我来说,这种数字似乎是正确的。
再次在 Xen 实例上,我尝试启用/调整 sysctl.conf 中的几乎所有设置。包括启用接收数据包控制和接收流控制以及将线程/进程固定到 CPU,但没有明显的收益。
我知道运行虚拟化时性能会下降。但到这个程度?速度较慢的裸机服务器优于 virt。8 核乘以 5?
在进一步调查并查明问题时,我发现netperf性能测试工具可以模拟我遇到的类似场景。使用 …
我已经阅读了很多关于 RAID 控制器/设置的文章,经常出现的一件事是没有缓存的硬件控制器如何提供与软件 RAID 相同的性能。真的是这样吗?
我一直认为硬件 RAID 卡即使没有缓存也能提供更好的性能。我的意思是,你有专门的硬件来执行任务。如果是这种情况,获得没有缓存的 RAID 卡(例如 LSI 9341-4i 之类的并不便宜)有什么好处。
此外,如果只有缓存才能提高性能,是否有缓存配置可以立即写入磁盘但将数据保留在缓存中以进行读取操作,从而使 BBU 不是优先事项?
不是技术问题,但仍然是一个有效的问题。设想:
HP ProLiant DL380 Gen 8 配备 2 个 8 核 Xeon E5-2667 CPU 和 256GB RAM,运行 ESXi 5.5。给定供应商的系统的八个 VM。四个 VM 用于测试,四个 VM 用于生产。每个环境中的四个服务器执行不同的功能,例如:Web 服务器、主应用程序服务器、OLAP DB 服务器和 SQL DB 服务器。
CPU 共享配置为阻止测试环境影响生产。SAN 上的所有存储。
我们对性能有一些疑问,供应商坚持认为我们需要为生产系统提供更多内存和 vCPU。但是,我们可以从 vCenter 中清楚地看到,现有的分配没有受到影响,例如:主应用服务器上 CPU 利用率的月度视图徘徊在 8% 左右,奇数峰值高达 30%。峰值往往与备份软件启动一致。
RAM 上的类似故事 - 服务器的最高利用率约为 35%。
因此,我们一直在使用 Process Monitor (Microsoft SysInternals) 和 Wireshark 进行一些挖掘,我们向供应商建议他们首先进行一些 TNS 调整。然而,这不是重点。
我的问题是:我们如何让他们承认我们发送给他们的 VMware 统计数据足以证明更多的 RAM/vCPU 无济于事?
--- 更新 12/07/2014 ---
有趣的一周。我们的 IT 管理层已经说过我们应该对 VM 分配进行更改,我们现在正在等待业务用户的一些停机时间。奇怪的是,业务用户会说应用程序的某些方面运行缓慢(相比之下,我不知道),但是当我们可以关闭系统时,他们会“让我们知道”(抱怨,抱怨!)。
顺便说一句,系统的“慢”方面显然不是 HTTP(S) 元素,即:大多数用户使用的“瘦应用” 。这听起来像是主要金融机构使用的“胖客户端”安装,这显然是“慢”的。这意味着我们现在正在调查中考虑客户端和客户端-服务器交互。
由于该问题的最初目的是寻求帮助,以确定是否沿着“戳它”路线,或者只是进行更改,而我们现在正在进行更改,因此我将使用longneck的答案关闭它。 …
virtualization performance performance-monitoring vmware-esxi vmware-vsphere
这个问题很笼统,但最特别的是我想知道运行 Ubuntu Enterprise Cloud 的虚拟机是否会比没有任何虚拟化的同一物理机慢。多少(1%、5%、10%)?
有没有人测量过 Web 服务器或数据库服务器(虚拟 VS 物理)的性能差异?
如果取决于配置,我们假设两个四核处理器,12 GB 内存和一堆 SSD 磁盘,运行 64 位 ubuntu 企业服务器。最重要的是,只有 1 个虚拟机允许使用所有可用资源。
performance ×10
linux ×3
amazon-ec2 ×1
apache-2.2 ×1
benchmark ×1
freebsd ×1
hard-drive ×1
io ×1
lsi ×1
raid ×1
sas ×1
sata ×1
scaling ×1
solaris ×1
sysctl ×1
tuning ×1
vmware-esxi ×1
xen ×1