我有一台带有 48G RAM 的全新服务器,我将把它用作数据库服务器。我不希望磁盘读取出现问题,但我绝对希望针对写入密集型负载模式进行优化。
操作系统是 RHEL 5.6,FS 是 ext3,我已经在 /etc/fstab 中添加了“noatime”和“data=writeback”,后一个选项有助于大大减少 LA。我的下一个目标是尽可能优化 pdflush 过程。我尝试应用这里提到的调整,但无济于事。可能这些信息已经过时了。
我还有哪些选择?我应该继续试验 pdflush 还是保持原样更好?我倾向于降低dirty_ratio和dirty_background_ratiosysctl 值以增加 I/O 平滑度,但这些值似乎与性能无关,压力测试下 Munin 中的负载模式基本相同。
我还应该尝试不同的 I/O 调度程序吗?在写入密集型设置中拥有大量 RAM 是否能让我受益?我知道磁盘 I/O 速度和延迟与 RAM 无关,但我的目标不是神奇地更快地写入磁盘,而是提高系统稳定性并实现某种优雅的降级。
假设我有良好的备份,并且可以接受进一步的数据一致性权衡,例如“data=writeback”。
谢谢你。
我试图解决这个问题两天,但没有成功。服务器是 MySQL 数据库服务器。
硬件: DELL Poweredge 1950、2x Intel Xeon Quad Core E5345 @ 2.33GHz、16 Gb mem、2x 146Gb SAS(软件RAID1)
软件: Ubuntu 10.04.3 LTS、MySQL 5.1.41
问题:虽然不使用 MySQL 并且在没有数据库的情况下运行,但一切似乎都很好。一旦我安装了一个数据库,它就有理由在低内存消耗的情况下 100% 使用所有 8 个内核。所以,你可以想象平均负载很高(我第一次看到 212 的平均负载)。服务器不会变得无响应,但您可以在浏览安装的项目时看到它很慢。
附加信息:
my.cnf 也不是一个原因,因为我使用了默认的一个和我在另一台服务器上的同一个发行版上使用的那个。有趣的是 mysql 不关闭任何进程并运行到 max_connections 的限制。 我测试了磁盘速度,看起来没问题。
正在运行的服务器上的更多输出:
dstat -cndymlp -N total -D total 3:
Run Code Online (Sandbox Code Playgroud)

htop 命令:

有没有人遇到同样的问题?你能想到什么解决办法?
我们在许多应用程序服务器上安装了 3 个 Ruby on Rails 应用程序(A、B 和 C)。我们的前端是 HAProxy,后端是 Apache + Phusion Passenger。最初我们在每个应用程序服务器上都安装了所有 3 个 Rails 应用程序,但是这个设置很慢,因为 HAProxy“不知道”给定的 Rails 应用程序在给定的支持服务器上是否“热”。

每个乘客实例配置为最多运行 8 个 Rails 应用程序实例。
考虑以下场景(简化):
在每分钟有大量请求的大计划中,所有 3 个 Rails 应用程序经常在每个应用程序服务器上启动和停止,这很慢。
在完美世界中,应用程序启动一次并处理大量请求,而无需关闭和重新启动。这就是为什么我们必须在 3 个 Rails 应用程序之间划分我们的应用程序服务器:
问题:是否有一个负载均衡器软件可以“感知”后端并且知道并使用以下信息来平衡负载:
load-balancing haproxy ruby-on-rails phusion-passenger high-load
我的服务器有24个CPU核心,96G内存,安装了CentOS 7.2 x86_64。
用大数据集启动我的程序后,我的程序将使用大约50G内存,Linux系统会显示系统中断率高,但上下文切换率低。dstat将显示在 500k int/s 和 1000k int/s 之间。CPU 使用率将接近 100%,大约 40% us,60% sy。
如果数据集很小,程序会使用大约5G内存,一切都会好的,CPU使用率100%,大约99%us,1% sy。这是预期的。
程序是我自己写的,是一个多线程程序。它不做任何网络IO,很少做磁盘IO,主要是内存操作和算术。无论数据集大小如何,线程模型和算法都是相同的。
我的问题是,我怎样才能准确地找出我的程序使用最多的中断(并尽可能摆脱它们以提高性能)?
我的设置是 Intel® Core™ i7-2600 和 RAM 16 GB DDR3 RAM
varnish+nginx+php-fpm+apc 用于使用 W3 Total Cache 和 CDN 的不是很重的 WordPress 博客
我的问题是,根据 blitz.io 清漆每秒 55 次点击后开始发出超时。此时的 CPU 使用率几乎不到 1%。可用内存始终保持 10GB+。
我尝试直接对 php-fpm 进行基准测试,结果为 150 次点击/秒,没有任何超时。但在那之后,CPU 使用率达到 100% 并停止响应。
你能帮我优化它以处理更多吗?
据我了解 nginx 在这里没有任何关系,所以我没有包含它的配置。
php-fpm 配置
listen = /tmp/php5-fpm.sock
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
pm = dynamic
pm.max_children = 150
pm.start_servers = 7
pm.min_spare_servers = 2
pm.max_spare_servers = 15
pm.max_requests = 500
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] …Run Code Online (Sandbox Code Playgroud) 我们有高流量网站的服务器。最近我们从
2 x 4 核服务器(/proc/cpuinfo 中的 8 核),32 GB RAM,运行 CentOS 5.x,以
2 x 4 核服务器(/proc/cpuinfo 中有 16 核),32 GB RAM,运行 CentOS 6.3
运行 nginx 作为代理的服务器、mysql 服务器和 sphinx-search。
流量很高,但 mysql 和 sphinx-search 数据库相对较小,通常一切都运行得非常快。
今天服务器的平均负载为 100++。查看 top 和 sar,我们注意到 (%sys) 非常高 - 50% 到 70%。磁盘利用率不到 1%。我们尝试重新启动,但重新启动后问题存在。在任何时候服务器至少有 3-4 GB 的可用内存。
只有 dmesg 显示的消息是“端口 80 上可能发生 SYN 泛洪。正在发送 cookie。”。
这是sar的片段
11:00:01 CPU %user %nice %system %iowait %steal %idle
11:10:01 all 21.60 0.00 66.38 0.03 0.00 11.99
Run Code Online (Sandbox Code Playgroud)
我们知道这是交通问题,但我们不知道将来如何进行以及在哪里检查解决方案。
有没有办法我们可以找到那些“66.38%”的确切使用位置。
任何建议,将不胜感激。
更新:今天平均负载“正常”,“sys%”也正常~4%。然而,今天的流量比昨天减少了大约 20-30%。这让我觉得昨天的问题是因为 TCP 的一些内核设置。
我有一个由 nginx 服务的网站,每分钟大约有 60 000 个请求。最近,我启用了open file cache并且看到了性能的显着提高。但是到了晚上,当负载最大时,响应时间仍然很大,并且nginx使用了大量的IO。
这是我当前的设置:
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Run Code Online (Sandbox Code Playgroud)
而且我还剩下一些记忆:
free -m
total used free shared buffers cached
Mem: 7910 6917 992 0 439 885
-/+ buffers/cache: 5592 2317
Swap: 8099 0 8099
Run Code Online (Sandbox Code Playgroud)
问题:现在我可以为open_file_cache max=10000和 其他参数选择正确的值吗?10000够了吗,是太小了还是太大了?有没有办法监控打开的文件缓存使用情况?
在过去的 2 天里,我的服务器开始出现问题,该服务器上有几个用户。服务器是 OpenVZ VPS。通常当我遇到高 CPU 使用率时,我总是使用top命令来找出原因。但是对于这个服务器,我没有从top命令中收到任何有用的信息。以下是我遇到的问题的示例屏幕截图

从屏幕截图中可以看出,%CPU对于所有进程,该列几乎总是为零,实际上我看到的大部分时间都是零,但 CPU 使用率高达 10 个内核!
我完全迷失了,不知道该怎么做才能找出原因。所以我想问一下是否有人对我面临的可能原因有任何想法?可能是因为服务器问题?
感谢您的任何建议!
编辑:
请注意,此屏幕截图仅在发生高负载时拍摄。它每隔几个小时发生一次,持续约 20 分钟。正常使用只有0.0-0.2核左右。下面是一个正常使用的例子。
进一步更新
刚才又发生了,这里是建议命令的截图
很抱歉,我对这些不了解,但如果我理解正确,磁盘使用率没有任何问题,io 使用率非常低。
最后更新
我已经使用使用建议的方法试过vmstat,ps在答案和注释中给出的,也没有找到有用的信息。当峰值发生时,我什至停止了 apache、mysql 但它没有帮助。我终于联系了VPS提供商并要求更改为另一个节点。他告诉我,他知道节点的问题,最近被恶意客户严重滥用,他正在努力解决这些问题。所以我想我现在不需要做任何事情了。尽管如此,我还是要感谢所有提出建议的成员,让这个问答对以后的参考有用!
我知道在某些情况下,我们会在服务器上遇到繁重的 http(s) 负载,我们应该使用负载均衡器在多个后端服务器之间分配负载。
但我在这里有一个困惑!假设有太多用户(比如 100,000)试图同时访问example.com:80负载均衡器(例如 Apachemod_proxy_balancer 或任何其他独立的负载均衡器)想要在多个后端服务器之间分配此负载,但所有流量仍然必须通过前端服务器传递,这会给该服务器带来大量流量,即使所有请求在后端服务器解析,前端服务器仍然必须管理它们(假设在最好的情况下它必须为每个请求创建一个唯一的线程,这会导致该服务器在创建 100,000 个线程后立即崩溃!)。
现在我的问题(这对专家来说可能听起来很有趣!)是负载均衡器如何处理这种情况?换句话说,前端服务器如何能够直接在客户端和后端服务器之间建立链接,而不必承受如此重的网络负载?(我知道在这种情况下我们不能将后端服务器称为真正的“后端”!但假设现在可以)这种情况是否需要任何特定于应用程序的更改?(例如,为了简单地将带有 httpLocation标头的客户端重定向到其他服务器)
我正在尝试测量两台机器之间的一种方式延迟,我想ping用来将ICMP数据包从一台机器发送到另一台机器。数据包之间的间隔应为 1 微秒 (1us),我想发送 100 万个数据包 (10^6),因此发送数据包总共需要 1 秒。
另外,我不关心另一台机器的响应(我只会在第二台机器上捕获数据包并对其进行分析)。
现在我已经尝试过:
ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 -b 255.255.255.255
Run Code Online (Sandbox Code Playgroud)
我还通过停用-l和-f选项进行了试验。当我使用较大的值时,-l我收到一条警告,指出 rcvbuf 不足以保持预加载。
我正在使用 tcpdump 捕获来自我的机器的传出数据包以及传入另一台机器的数据包。
问题是数据包之间的间隔在大多数情况下在5us和15us之间,并且稍大一些。
当我直接发送到像谷歌这样的网站时,我遇到了同样的问题:
ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 google.com
Run Code Online (Sandbox Code Playgroud)
我想要的是:
最好使用ping命令及其提供的选项(如果它们足够)来执行此操作。我有管理员权限。
更新
我的目标是测量不同电缆在数据包上引入的延迟。所以我需要准确的数据包生成和捕获。在硬件方面,我有合适的工具,但我没有得到我所期望的。我认为问题出在软件上。
我的问题是,当我使用该-i选项时,ping 似乎没有按预期工作。当我使用-f -l 1000000捕获时,每 3us 到 5us 发送一次。当我指定-f或不指定这两个时,数据包每 12 毫秒生成一次。
一般来说,我认为我无法控制广播 ping 的数据包距离。
high-load ×10
linux ×3
nginx ×2
ext3 ×1
filesystems ×1
haproxy ×1
http-server ×1
interrupts ×1
load-balance ×1
memory ×1
mysql ×1
networking ×1
optimization ×1
php-fpm ×1
ping ×1
top ×1
ubuntu ×1
varnish ×1