我有一个运行良好的高 IO 应用程序,并且迄今为止扩展性良好。在过去的几个月里,我们一直在努力展望未来并预测我们的下一个瓶颈将出现在哪里。其中之一肯定是文件系统。
我们目前正在监测
这对我来说似乎有点太稀疏了。我还应该看什么?我什至不确定操作/秒的“黄线”是什么。
我们有一个中等流量的站点(大约每天 20,000 次点击),在 Apache 2.2、Ubuntu 9.10 服务器上运行一个 PHP/MySQL 应用程序,来自 Amazon EC2 c1.small 实例(1.7 Gb 的 RAM)。
我们遇到了网站反复无响应的问题。作为一个肮脏的黑客,我将 MaxClients/ServerLimit 设置为 450。
<IfModule mpm_prefork_module>
KeepAlive On
KeepAliveTimeout 7
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 450
ServerLimit 450
MaxRequestsPerChild 0
</IfModule>
Run Code Online (Sandbox Code Playgroud)
该网站似乎比以前更长,但仍然死亡。检查进程列表,我有(第三列是物理内存,第四列是虚拟大小):
xxxxxxxxx@domU-XXXXXXXXX:/etc/apache2$ ps -eo pid,user,rss,vsz,args | grep apache
2333 root 11092 39084 /usr/sbin/apache2 -k start
3704 www-data 11060 41292 /usr/sbin/apache2 -k start
3826 www-data 10016 39844 /usr/sbin/apache2 -k start
3954 www-data 11976 41612 /usr/sbin/apache2 -k start
4061 www-data 11844 41668 /usr/sbin/apache2 …Run Code Online (Sandbox Code Playgroud) 我有一台运行 MySQL 的 24GB 机器(仅限 InnoDB 表)。
我的 innodb 数据集有 11.5GB 大,我已将 innodb_buffer_pool_size 设置为 14GB 以允许一些增长。所以整个innodb数据集都加载到了ram中,很好。
但是今天我注意到我的索引大小也超过了 11GB。
增加我的 innodb_buffer_pool_size 以便索引空间也适合吗?或者与此无关?
我知道 Linux 是为多用户/并发进程而构建的,但在公司级别,其中许多用于单个(但很大)的应用程序以支持内部服务,其中仅服务于很少的客户端。
在这样的用例中,我们应该如何调整系统或内核(特别是 Red Hat Linux、Fedora、CentOS)以针对该场景进行优化?为了最大限度地减少延迟,减少上下文切换,本地磁盘 I/O 非常少。
会话长度可以是持久的(因为客户端的数量只是几个),数据大小交换很小,但是非常频繁,例如每秒 1k 到 2k 的消息,大小从 40 到 100 字节。
我有一个被证明有问题的 Nginx 和乘客设置。
在相对较低的负载下,服务器似乎得到了备份并开始将这样的结果搅拌到 error.log 中:
connect() to unix:/passenger_helper_server failed
(11: Resource temporarily unavailable) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)
我的乘客设置是:
passenger_min_instances 2;
passenger_pool_idle_time 1200;
passenger_max_pool_size 20;
Run Code Online (Sandbox Code Playgroud)
我已经做了一些挖掘,看起来 CPU 被钉住了。内存使用情况似乎很好,passenger_memory_stats 显示最多使用了大约 700MB,但 CPU 接近 100%。
这足以导致此类错误吗?
我应该减少游泳池的大小吗?我应该查看其他配置设置吗?
任何帮助表示赞赏
其他相关信息:
我可以访问运行 Apache 2.2.15 和 MySQL 5.1.52 的 CentOS 6 Web 服务器(一个 PHP/MySQL 论坛)。这个盒子有双八核至强。
我发现查看 CPU 图表是前两个内核(0 和 1)达到了 90% 的使用率,而其他 14 个内核仅达到了 30-40% 的使用率。我认为 Core 8 是第二个处理器的第一个内核,使用率很高(高达 90%),但正如前面提到的,所有其他内核的使用率都很低。
Apache 启动了大约 20 个进程,我怀疑在其默认状态下,它无法理解,并且自然地利用了所有内核。这应该是我认为的内核工作(有人可以确认吗?)。然而,随着这些内核的最大化,尽管有空闲 RAM 和磁盘 I/O,但性能还是会显着下降。
有什么我可以在 Apache 中进行调整以“使其意识到”所有其他内核的东西,或者内核 peramater 将某些进程分配给某些内核?例如,我可以排除内核 0 和 1 用于 Apache 和 MySQL 吗?
我是 Torservers.net 的创始人,这是一个运行 Tor 出口节点的非营利组织。我们有许多具有 Gbit 连接和多个 IP 的机器,而且我们似乎在所有这些机器上都达到了开放 TCP 套接字的限制。我们总共徘徊在大约 70k 的 TCP 连接总数(每个 IP 大约 10-15k),并且 Tor 正在记录“错误绑定网络套接字:地址已经在使用中”像疯了一样。有什么解决办法吗?BSD 是否也有同样的问题?
我们运行 Tor 进程,每个进程监听不同的 IP。例子:
# NETSTAT=`netstat -nta`
# echo "$NETSTAT" | wc -l
67741
# echo "$NETSTAT" | grep ip1 | wc -l
19886
# echo "$NETSTAT" | grep ip2 | wc -l
15014
# echo "$NETSTAT" | grep ip3 | wc -l
18686
# echo "$NETSTAT" | grep ip4 | wc -l
14109
Run Code Online (Sandbox Code Playgroud)
我已经应用了我可以在互联网上找到的调整:
# cat /etc/sysctl.conf
net.ipv4.ip_forward …Run Code Online (Sandbox Code Playgroud) 我计划(私下)部署一个服务器,该服务器将在 100MB 到 50GB 的文件中使用随机 I/O。请求的范围从 128 KB 到 4MB。配置文件将是 50:50,涉及读取和写入,并有更多读取的趋势。
什么文件系统可以最好地处理这种负载?我现在选择了 XFS。但是我应该研究哪些可调参数?
谢谢
我希望稍微调整我的查询缓存。根据7.6.3.4。手册中查询缓存状态和维护:
Com_select 值由以下公式给出:Qcache_inserts + Qcache_not_cached + 在列权限检查期间发现错误的查询
但是在5.1.5 中。服务器状态变量它表明这是由 DBMS 维护的。话说回来
mysql> show status like 'Com_select%';
Run Code Online (Sandbox Code Playgroud)
总是返回 1 的值 - 我很确定自从我的数据库启动以来,我已经在我的数据库上运行了多个非缓存的选择查询。
看起来好像其他人也同样感到困惑。
这个状态变量是多余的吗?手册的哪一点是错误的?
TIA
为了开发目的,如何最好地调整 Linux PC?
tuning ×10
linux ×3
performance ×3
apache-2.2 ×2
centos ×2
mysql ×2
cache ×1
development ×1
ext3 ×1
filesystems ×1
innodb ×1
max-requests ×1
monitoring ×1
nginx ×1
optimization ×1
process ×1
redhat ×1
socket ×1
tcp ×1
ubuntu ×1