我有一个网站,可以存储用户个人资料图片。每个图像都存储在用户特定的目录 (Linux) 中。目前我有 30 多个客户群,这意味着我将拥有 30 多个文件夹。但是我当前的 Linux 机器(ext2/ext3)不支持创建超过 32000 个目录。我该如何度过这一关?即使是 YouTube 的人也有同样的问题,视频缩略图。但是他们通过迁移到 ReiserFS 解决了这个问题。我们不能有更好的解决方案吗?
更新:当在 IRC 中询问时,人们询问是否将其升级到 ext4,它有 64k 的限制,当然你甚至可以通过它。或者内核黑客来改变限制。
更新:如何根据用户 ID 范围将用户群拆分为文件夹。意思是一个文件夹中的 1-1000,另一个文件夹中的 1000-2000。这似乎很简单。你说呢,伙计们?
坦白说,就没有其他办法吗?
我在 ubuntu 上有一个带有 apache/php 的专用服务器,为我的 Wordpress 博客提供每天大约 10K+ 的综合浏览量。我在 APC 上安装了 W3TC 插件。
但是服务器时不时地停止响应或变慢,我必须重新启动 apache 才能恢复它。
这是我的配置我做错了什么?
ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
TimeOut 40
KeepAlive on
MaxKeepAliveRequests 200
KeepAliveTimeout 2
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 8
ServerLimit 80
MaxClients 80
MaxRequestsPerChild 1000
</IfModule>
<IfModule mpm_worker_module>
StartServers 3
MinSpareServers 3
MaxSpareServers 3
ServerLimit 80
MaxClients 80
MaxRequestsPerChild 1000
</IfModule>
<IfModule mpm_event_module>
StartServers 3
MinSpareServers 3
MaxSpareServers 3
ServerLimit 80
MaxClients 80
MaxRequestsPerChild 1000
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP} …Run Code Online (Sandbox Code Playgroud) 我们正在尝试设计一种能够处理超过 64k 个 websocket 的架构。
我们首先尝试使用 Amazon ELB,但它的设计不允许意外的流量激增或 websocket。(TCP 模式意外超时 websockets)
使用 HAProxy,这些限制不适用,但我们将被限制在 HA 和后端服务器之间维护的 ~64k websockets。
想到的多种解决方案:
有一个更好的方法吗 ?
domain-name-system scalability load-balancing haproxy websocket
我运行的网站流量激增,因此自动缩放解决方案在这种情况下非常有利可图。目前,Web 服务器能够水平自动扩展,但瓶颈在 MySQL 服务器上。
有什么建议?先感谢您
我最近给自己赠送了一台新的专用服务器,我正试图从中榨取最大的性能,以获得乐趣和学习。
我正在尝试实现该服务器每秒可以处理的最大可能请求数,目标是 500K 请求/秒,如此处所述 - http://lowlatencyweb.wordpress.com/2012/03/20/500000-requestssec-modern-http-servers -很快/
服务器详情
英特尔® 至强® E3-1270 4 核 (8 HT) x 3.4 GHz
内存 24 GB DDR3 ECC
硬盘空间 2,000 GB (2 x 2,000 SATA) RAID 软件 RAID 1
局域网 100mbps
操作系统 Centos 6.3 64 位
nginx
对于静态 txt 文件,我只能达到 35K 请求/秒。我在同一台机器上运行基准测试。我知道 NIC 限制和网络开销
ab -n100000 -c200 http://localhost/test.txt
Run Code Online (Sandbox Code Playgroud)
更新- 165K 请求/秒
我尝试了另一个名为的基准测试工具wrk,它给了我 165K 请求/秒。非常酷!
更新 2 - 250K 请求/秒
配置文件
#######################################################################
#
# This is the main Nginx configuration file.
# …Run Code Online (Sandbox Code Playgroud) 数据包如何从网络接口队列调度到 CPU,然后再转发到线程进行处理?在涉及如何跨队列散列数据包、硬件中断与软中断、CPU/内存/应用程序/线程局部性以及多线程与多进程守护进程时,需要考虑什么,以避免尽可能多的数据包重新调度/复制?
我有一个多线程网络守护进程(比如,Unbound 解析器)在 Debian amd64 和 Linux 2.6.32(是的,旧的)上运行 16 个本机线程,因此应用程序负载分布在 16 个 CPU 上。网卡是 bnx2 (BCM5709S),支持 8 个 MSI-X rx/tx 队列。每个队列的 IRQ 通过静态映射 /proc/irq/n/smp_affinity 中的中断亲和性分配给单独的 CPU(irqbalance 从来没有做得很好),队列散列类型(RSS 类型)是默认的(IP src+dst , TCP 运动+dport),使用默认的散列键。
所有这些都有助于分散负载,但并不均匀:通常有一个应用程序线程完成其他线程两倍的工作(=每秒请求数),一个 CPU(可能是处理该特定线程的一个)软中断率是其他线程的两倍CPU。
CPU 启用了超线程,但我还没有做任何事情来在“真实”内核之间分散负载(我真的应该这样做)。
Linux 附带了一个相当全面的网络扩展文档,但我遗漏了一些空白:
该文档是关于 RSS 配置的:
如果设备支持足够的队列,典型的 RSS 配置将是每个 CPU 有一个接收队列,否则每个内存域至少有一个接收队列,其中内存域是一组共享特定内存级别(L1、L2 、NUMA 节点等)。
问:如何确定服务器的 CPU/缓存/内存域配置?
有关接收流控制 (RFS) 的信息似乎回答了我关于将数据包发送到正确的 CPU/线程的一些问题:
RFS 的目标是通过将数据包的内核处理引导到正在运行使用数据包的应用程序线程的 CPU 来提高数据缓存命中率。
Q:在DNS解析的情况下,通常有一个查询包和一个应答包。使用多线程守护进程,是否只有一个线程运行 bind()+recvfrom(),因此在将工作调度到其他线程之前,无论如何必须处理所有新传入的数据包?这个特殊的用例会从分叉操作(每个 CPU 一个进程)中受益吗?
问:那么接收流控制通常最适合多线程 TCP 守护进程吗?
Q:如何确定是多线程还是多进程操作?显然有共享内存和数据结构、资源争用等,但我正在考虑数据包流和应用程序侦听器。
问:如果没有接收流控制,或者使用简单的 UDP 服务,数据包是否会到达“错误”的 CPU,因此会以某种方式重新调度到“正确”的 CPU?这会触发 NET_RX 软中断吗?
Q:网卡队列和CPU之间是否有NET_RX软中断?CPU 和监听线程/进程之间是否也有一个?如果接收线程将数据包调度到工作线程,是否还有另一个可能?
太糟糕了,Ben Hutchings …
谁能推荐一个好的 IPSec 软件,它可以使用多个 CPU 内核在Linux 双 CPU 四核 E5620 Xeon设置(总 16HT 内核)上实现~2Gbps 的性能?
我试过 OpenSwan 和 StrongSwan。OpenSwan KLIPS 堆栈仅在单个 CPU 内核上运行。KLIPS+OCF 加密卸载似乎也很糟糕,因为它以 70% 的速度消耗了所有 16 个 CPU 内核,而仅提供了约 600Mbps 的传输速度。作为副产品,它还对 TCP 数据包进行重新排序。
到目前为止,使用不同协议的OpenVPN,我们能够在相同的硬件上实现 ~2Gbps 的负载平衡,没有任何问题。16 个内核中只有 4 个被 100% 使用。现在是时候用 Ipsec 做同样的事情了。最好应该是 OpenSource IPsec 解决方案。
更新:
我的最新发现表明 IPsec NETKEY 堆栈可能能够毫无问题地处理两场流量(但仅限于多队列 NIC)。我无法肯定地验证这一点,因为似乎 NAPI 在高负载下将 NIC 驱动程序切换到轮询模式,那时所有性能从 1.7 Gbps 下降到 500 Mbps。此外,ubuntu 10.04 似乎没有考虑某些内核线程的时间,因此我看不到工作负载如何分布在所有 CPU 内核上。
需要多快分配临时端口才能进入 TCP 端口耗尽状态?
有人告诉我有 ~4k(旧版 Windows)、~16k(新版 Windows)或 ~28k(RH Linux)端口可用于客户端请求。现在,端口号池是全局的还是每个远程 IP 地址?
如果它们是全局的,由于端口在 240 (Windows) 或 60 (RH Linux) 秒后才可重用,因此需要以每秒 ~16/66/466 的速率相应地分配它们?
这样对吗?
根据您的经验,这是我应该担心的事情吗?
“每个人”都知道 Apache 适用于 Linux/Unix,而在 Windows 上 IIS 是必经之路。
但是,我不是 Linux 专家,如果在生产环境中使用与开发过程中使用的设置相同的设置,那将是一种极大的解脱。我是一名独立开发人员,我正在努力使事情尽可能简单。我已经摆脱了其他问题,例如存储(-> 云)电子邮件(-> 邮戳)。
那么,当我将 Apache 放在来自 Rackspace 的 Windows 虚拟专用服务器中并将其用作PHP 项目的主要生产环境时,可能会发生什么真正的缺点?与不必学习不同操作系统的可能性相比,获得更多 VPS 资源的钱并不是什么大问题。
预计不会出现超大流量。我的 PHP 项目也可以相当优化。有一些繁重的脚本,但仅适用于内部(登录)用户。所有其他的都可以或多或少地静态提供。
scalability ×10
linux ×3
apache-2.2 ×2
performance ×2
amazon-rds ×1
database ×1
directory ×1
filesystems ×1
haproxy ×1
ipsec ×1
linux-kernel ×1
mysql ×1
nginx ×1
php ×1
php5 ×1
port ×1
scalr ×1
sharding ×1
tcp ×1
threads ×1
web-server ×1
websocket ×1
windows ×1
wordpress ×1