网站允许用户上传自定义头像,上传照片,这些图片普遍不大,处理后在10K~50K之间。粗略统计了下网站90%图片的图片体积在10K到50K之间,目前网站有5w多张图片,总的体积有1.5G左右。 当然网站弄了台专门的图片服务器,可是当图片并发请求大的时候,通过性能监控工具发现 请求磁盘 太过频繁,磁盘非常繁忙,而CPU,网络倒是能应付,图片的响应就有点慢了,我想图片响应缓慢,系统的瓶颈应该在磁盘方面了。服务器内存可供使用的资源还有8个G左右,能否在不升级系统硬件,优化程序来提高大并发请求情况下,提升图片的响应速度。
使用NIO,将文件先映射到内存在处理吧
1、把图片服务器弄成分布式的,提高并发吞吐量。
2、图片服务器是单个服务吗?如果是,可以考虑用apache做一个集群,可以再一台机器上部署多个服务,来提高并发吞吐量。
3、换固态硬盘,听说固态硬盘挺快的,具体没用过。
不知道你的图片server使用的是什么,建议使用nginx,性能上比apache好了不是一两倍,开启gzip,配置图片缓存。
另外代码上也可以做一下控制,比如非第一屏的图片全部做懒加载,用户鼠标滚动到时再加载图片,这样可以减少图片的http并发量。
还有楼上说的使用nio,虽然我没使用过,但是感觉思路是对的,即使用缓存。
用VARNISH, 缓存到内存,
另外可以用CDN, 根据用户距离来选择最近的服务器
换固态硬盘,用Nosql缓存图片。
1、页面可以使用懒加载,当浏览到图片的时候在加载,类似于淘宝的BigRender的模式,这样可以降低同一时间的并发量,降低服务器的压力。
2、如果是图片在网络传输过程中耗时较高,压缩图片传输,通过减小传输数据的大小来提升性能。
3、服务器将图片写进缓存中,可以使用MemCache,有效提高后台读写速度
[list]
[*]nginx缓存
[*]squid或者varnish
[*]直接云服务
[/list]
楼主看看这篇文章,淘宝的图片处理
http://blog.sina.com.cn/s/blog_633219970100ykt9.html
这个tfs是开源的,在code.taobao.org上能找到
这是:
[url]http://blog.sina.com.cn/s/blog_633219970100ykt9.html [/url]
squid
频繁的访问磁盘,你不加硬件的话,还要提高性能,那么只能降低磁盘的访问,如何降低呢。
估计也只能用缓存,把访问量大的图片都读取出来放到缓存中。
建议是往缓存方向考虑。你有8个G呢。
你好,根据你的问题可以使用浏览器缓存或客户端缓存,具体可以参考:
http://www.cnblogs.com/chenzhao/archive/2012/11/25/2787958.html
把1.5G图片全部写入内存。。。。 :lol: :lol: :lol: :lol:
用个图片服务器看看,也可以试试淘宝的tfs。
一方面降低因请求占用的内存空间大小,另一方面增加图片CACHE的内存容量。