我有nginx + php-fpm + apc设置。 没有数据库。 在数据文件夹我有一个简单的PHP脚本,当调用文件名参数检查,如果文件存在,如果它然后它把它,如果没有,那么它下载它在同一个文件夹,然后把它。 速度非常重要,现在用浏览器输出文件需要70ms。
这些文件是大小为1-2kb的图像。 有了这个速度在一些月份,该文件夹中将有成千上万的图像。 这个脚本将被称为每秒几十次(也许更多)。 所以恐怕服务器会开始挣扎。
你能告诉我:
-Nginx调整
– 系统调整
– 我应该什么时候运行一些硬盘维修?
你还有什么build议在这种情况下?
内存:386MB(可升级)CPU:Xeon E5506 @ 2.13GHz CentOS 6
更新#1一个有趣的想法:不要让PHP检查一个文件是否存在 – 让nginx尝试直接提供文件,然后作为404处理程序回退到PHP。 如果你离开nginx做它的事情,它应该很容易服务〜1000 2kb图像/秒没有调整。
这很难具体,因为这将需要更多的信息。 如果图像不是在每个请求上dynamic生成的,那么每次都不要通过脚本传递它们,也就是使它们静态。 如果图像不经常改变,我会尽量caching大部分内存。 你可以避免大量的磁盘I / O,因为很小的图像可以放在内存中,因为它们很小。
我们有很好的使用清漆的经验。 这就是所谓的反向代理caching,意味着它将接收来自客户端的传入请求,检查其caching,然后直接从caching中提供请求的对象,或者先从后端nginx服务器检索。 清漆可以很容易地处理每秒数以千计的请求,CPU和I / O使用率非常低。 响应时间非常快。 我们得到的响应时间为20-30ms,其中一半是电子来回运行。
把清漆放在nginx前面,确保每个独特的图像都有一个唯一的URL。 把几千兆字节的RAM放在你的服务器上,并configurationVarnish,把它的大部分用作caching。 如果您的图像是1-2kB,1GB或RAM可以caching大约500-1000张图像。 Varnish可以和默认的规则集一起工作,但是它是非常可调的,这使得它比其他代理caching更具优势。
确保您的应用程序不会在域中设置Cookie,或者调整Varnish以抛弃指向图片的url的Cookie,因为它会采取谨慎的态度,并且在请求中包含Cookie时不caching请求。 此外,让你的应用程序返回过期的标题(请参阅“caching控制:最大年龄”),在将来足以使caching有用。 设置最大周龄很容易,如果一个对象需要更早过期,您的应用程序可以清除Varnishcaching中的对象,或者只是在新的URL上提供新的图像。
没有PHP检查文件是否存在 – 让nginx尝试直接提供文件,然后作为404处理程序回退到PHP。 如果你离开nginx做它的事情,它应该很容易服务〜1000 2kb图像/秒没有调整。
老实说,如果你依靠底层操作系统来告诉你是否存在一个文件…当你达到大量的文件时,你会遇到问题。 您在目录中拥有的文件越多,查找时间越长。 不同的文件系统格式可以在这方面做得更好,但这仍然是一个耗费时间的努力。
当检查文件是否存在时,文件系统将从上到下检查每个文件,直到find你正在查找的文件。 与ext2(例如)如果你正在寻找zzzz …你必须通过 – > zzzz每个文件,然后才能find它..
你最好做一长串的调整来解决这一堆头痛。 即cachingsearch结果…限制在目录中的文件数量…parsing文件到多个目录…等…