我有一个Web应用程序运行在一个低端的盒子(1GB内存),提供静态和dynamic(PHP)页面的混合。 这些PHP页面正在查询不经常更改的MYSQL数据库 – 每周一次?
我正在寻求做一个相当数量的caching,以保持一切又好又快。 我有页面,虽然是PHP,信息很less变化(获取可能每月会更改一次的项目列表?)。 几页可能会列出多达400条logging。
我有Varnish,Nginx,PHP-FPM,APC,MYSQL安装。 我想“我已经正确设置了一切。 页面正在服务,我有点击显示在光油…布里尔! 但是,由于网站的性质,我不确定它是否尽可能优化。
最近的search提出了一些可能有助于我的PHP页面的东西:
一个例子:一个新的PHP页面,其中列出了不less(200+)logging:2秒刷新后,1.5(ish)秒。 编辑:我是不切实际的,期望这个页面被caching在线的某处,并提供更快后,已被访问?
什么是我最好的select? 以上的一个或全部?
老实说,如果你已经尽可能地调整了一切,我会考虑硬件升级。 如果你有时间的话,看一下Facebook的研究,如HipHop( https://github.com/facebook/hiphop-php/wiki )。 他们已经做了一些惊人的研究和发展,以创build快速加载dynamic页面。
祝你好运!
当你不需要清漆的特殊function时,你可以放下它,并使用nginx的fastcgi_cache 。 但要小心,与proxy_cache相反,在整个设置中只能有1个cache_zone。
也许你的设置是有点过度优化…我想想要只使用nginx或清漆。
当涉及到memcache:取决于有多less请求/秒你有memc可以是一个真正的提升,但可能不需要你的情况。 当你有一个好的前端caching,你不需要启用内存caching,但YMMV。 我的理解是:您提供的页面经常不会更改,对吗?
我总是试图按照以下方式优化thw:
要小心MySQL的查询caching – 它使用全局锁,所以当你开始得到太多的活动时,你会看到周期性的死锁。 查询caching仅对完全相同的查询有用,而且如果您有许多这样的查询caching没有正确执行应用程序级caching。
工作performance的第一步总是要描述; 基于直觉的优化是一个浪费时间的好方法。
在工作中,我们使用Graphite作为我们的数据存储, StatsD和pipe道到石墨的修改版本作为主要的数据发送方法。 这两种工具都使得发送数据非常容易,然后Graphite拥有大量的分析工具。
例如,使用pipe道 – 石墨清漆脚本 ,我们从varnishstats获取所有的统计数据。 这使我们可以很容易地在Graphite中制作命中/未命中graphics,如下所示:

您可以使用memcached执行相同的操作,并将钩子添加到您自己的应用程序中以logging…以及任何事情!
你也可以find像xhprof和YSlow这样的单页面分析工具。
一旦你有了指标,那么你不仅知道你应该做什么,而且当你完成之后,你将能够衡量改进。 大家都喜欢validation!