- 浏览: 2654781 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
网站有多慢
网站一直比美丽说蘑菇街等同类型的网站慢一些,但到底有多慢,下面是一个对比:
http://www.duitang.com/topics/ 42297 bytes Requests per second: 0.49 [#/sec] (mean) http://www.mogujie.com/shopping/ 2390 bytes Requests per second: 2.87 [#/sec] (mean) http://guang.com/xihuan 945170 bytes Requests per second: 1.86 [#/sec] (mean)
可以看到逛的qps是我们的3倍多,所以这次优化的目标主要是提升搜索页面的QPS.
ps:为什么是从topics下手,因为topics是除了首页之外访问量最大的页面。
瓶颈在哪里
用户访问topics,网站通过ajax请求url:http://7599.t.duitang.com/hot/masn/?page=5&page_size=24&_type=&begin_time=1342876671
, 会做以下几件事情:
1. 从搜索引擎获(solr)取查询结果。(平均5ms,偶尔有20ms+的查询)
2. 搜索引擎返回的是id,通过id查询相应的message,并cache。
3. 执行cf.jsonResultMblog(),次方法主要是循环每个message,组装相应信息返回给页面。
经过测试发现 cf.jsonResultMblog()需要耗时900ms,这对一个方法来说太慢了。
cf.jsonResultMblog()做了什么
下面是cf.jsonResultMblog()的代码:
for item in blogs: if item: if get_latest: item = item.get_latest_forward() if not item: continue root = item.get_root() common = root and root.is_buyable_common() or False good = root and root.is_buyable_good() or False buylnk = root and root.is_buyable() and root.get_source() buylnk = buylnk and buylnk.link or "" usr = item.sender album = item.get_album() blog = { "id" :item.id, "common" :common, "good" :good, "msg" :mbtrimlinks(item.msg), "isrc" :item.middle_photo_path2(), "iht" :item.photo and item.photo.middle_height() or 0, "buylnk" : buylnk, "uid" :usr.id, "unm" :usr.username, "ava" :usr.get_profile().tinyAvatar(), "albid" :album and album.id or '', "albnm" :album and album.name or u'默认专辑', "favc" :root and root.favorite_count or 0, "repc" :item.reply_count, "zanc" :item.like_count, "sta" :item.status, "cmts" :[] } if root and root.sender: rusr = root.sender blog["rid" ] = root.id, blog["ruid" ] = rusr.id blog["runm" ] = rusr.username blog["rava" ] = rusr.get_profile().tinyAvatar() comms = item.get_top_comments() for comm in comms: if comm: blog["cmts" ].append({ "id" :comm.sender.id, "ava" :comm.sender.get_profile().tinyAvatar(), "name" :comm.sender.username, "cont" :comm.content, }) ajblogs.append(blog)
我整理了一下,for循环有15个查询:
- item.get_latest_forward()
- item.get_root()
- root.get_source()
- item.get_album()
- item.photo.middle_height()
- usr.get_profile().tinyAvatar() (获取用户头像,此方法走2个查询,每次5ms)-
- root.sender
- rusr.get_profile().tinyAvatar()
- item.get_top_comments()
- comm.sender
- comm.sender.get_profile().tinyAvatar()
- comm.sender.username
其中有一些方法走了cache, 但还是有一些方法走的是数据库查询,数据库查询每次耗时都在几毫秒,循环24次,总耗时就是上百毫秒。
我这次优化主要就是把数据库查询改成cache,如果不能走cache,就通过select in子查询先一次性查询出结果再处理。
一些总结
1. item.sender.id 比 item.sender_id 慢一个数量级,前者会触发一次查询。
2. django的对象关联非常方便,获取一个物品发布人的信息只需要 item.sender.profile,但这样写性能很差,这些查询都是通过数据库查询,而没有走cache。建议不要直接用django的对象关联,通过提供方法来做:
def get_sender(self): key = cf.generate_cache_key(self.sender_id, User) model = key and cache.get(key) if not model: model = self.sender cache.set(key, model, 60*60*24*3) return model
3.不要在for循环做耗时的数据库查询,累加效应之后性能非常差。
4.什么对象应该走cache? 我总结的就是被依赖的对象越多越应该cache起来,比如Auth_User,UserProfile,UploadFile应该被cache,而 Message对象没有被任何对象依赖,生命周期比较段,被cache起来命中率也不高。这点比较像jvm的GC里面的old区。
发表评论
-
spring-cloud问题排查
2019-11-18 14:58 520### 问题1报错,应用无法启动 org.springfra ... -
log4j 和slf4j的 类冲突解决
2018-07-14 16:11 19811. 检查 log4j 和slf4j的冲突 pub ... -
HikariPool-1 - Connection is not available, request timed out after
2018-05-07 19:13 6681在开发中遇到 HikariPool-1 - Conn ... -
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
2018-05-03 16:54 2409Java代码 publi ... -
log4j问题总结-加载配置文件
2014-08-20 16:34 1063今天遇到log4j的log4j.properties没有生效 ... -
一个诡异的类冲突错误排查记录
2014-08-13 10:44 816今天遇到一个问题排查了很久,记录一下。 问题原因,日常环境 ... -
tomcat7.0.26的连接数控制bug的问题排查
2014-04-23 19:51 1712今儿线上一台机器,监控一直在告警, mtophost[CM ... -
tomcat,jboss,jetty访问出现404错误问题记录
2014-04-21 19:51 1694原因是WEB-INF下面缺少jboss-web.xml ... -
记录Hadoop native libraries无法load的问题
2014-04-10 19:45 2298今天遇到一个错误,在本地往Hadoop写文件的时候报了一个错 ... -
Exception性能问题
2014-01-24 22:25 13071.从Exception往上介绍相关结构、代码 ... -
spring加载xml去远程获取dtd验证xml的问题
2014-01-24 11:57 899最近遇到spring 加载xml去远程获取dtd,但外网不 ... -
hbase查询超时导致的错误
2013-12-25 19:53 2715今天上线跑一个hbase程序出现如下错误: org.ap ... -
hbase无法启动问题
2013-12-24 23:53 930今天遇到hbase无法启动,找了很久,才发现可能是data ... -
web.xml配置注意点
2013-12-19 20:29 6411. servlet启动初始化 servlet默认只有访 ... -
Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
2013-12-17 23:22 3914作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章 ... -
linger close用法
2013-12-13 14:18 965Linux下tcp连接断开的时候调用close()函数,有 ... -
log4j-over-slf4的log4j Loger加载问题
2013-12-11 00:19 5781log4j-over-slf4是通过定义和log4j同包名 ... -
log4j,slf4j,logback问题总结
2013-12-10 18:12 6530ls4j初始化过程参考:l ... -
maven 小结(打包和单元测试)
2013-12-04 11:53 6861. 如何把一个jar和他依赖的包打包成一个 使用mave ... -
solr load比较高
2013-12-02 09:50 1069最近solr的load比较高,通过jstack查看: 写 ...
相关推荐
《大型网站性能优化实战:从前端、网络、CDN到后端、大促的全链路性能优化详解》中的很多性能优化方法和策略都是作者从实践中总结出来的,实用性非常强。《大型网站性能优化实战:从前端、网络、CDN到后端、大促的全...
### 大型网站性能优化实战从前端网络CDN到后端大促的全链路性能优化 #### 一、基于用户体验的性能优化要素 在现代互联网应用中,用户体验是衡量一个网站成功与否的重要标准之一。良好的用户体验不仅仅体现在美观的...
对于某网站来说,其性能测试主要关注产品页面刷新、产品上传和产品下载这三个核心功能。目标是确保系统在高压力环境下能够稳定运行,并满足预设的性能标准。 【延迟性能】 1. 产品页面刷新:要求响应时间小于5秒,...
总结,网站性能技术涵盖广泛,涉及前端、后端、服务器配置等多个方面。通过合理的代码优化、工具运用、服务器配置和持续改进,我们可以显著提高网站的加载速度和用户体验,这对于任何在线业务的成功都是至关重要的。...
总结来说,负载均衡是提升网站性能和可用性的重要手段。通过实施上述的负载均衡技术和性能优化策略,可以确保网站在面临高访问量时仍能保持良好性能,为用户提供快速、可靠的访问体验。同时,通过持续监控和性能测试...
总结来说,大规模网站性能优化需要从前端、后端、架构及监控等多个层面进行全面考虑和实施。只有这样,才能确保网站在应对高并发、大数据量的情况下,仍能保持高性能和良好的用户体验。同时,持续关注新的技术和工具...
- **案例一:电商网站性能调优**:针对电商网站的特点,从JVM参数配置、代码层面等多个维度进行调优,提高用户体验。 - **案例二:大数据处理平台调优**:大数据处理平台往往需要处理海量数据,通过对JVM内存配置、...
总结来说,XOIC网站性能测试工具通过多协议支持,提供全面的性能评估,是开发人员和网络管理员进行性能调优、故障排查和容量规划的重要工具。通过其丰富的测试功能,用户可以更好地理解和改进他们的网络环境。
这本书针对的是网站开发者、设计师以及对网站性能优化有兴趣的读者。它不仅涵盖了基础的网页设计原则,还深入剖析了提高网站性能的关键技术和策略。 一、网站性能的重要性 在当今互联网时代,网站性能对于用户满意...
Yahoo团队总结的关于网站性能优化的经验
在ASP.NET开发中,合理使用服务器控件(ServerControl)对网站性能至关重要。以下几点是优化服务器控件的关键: 1. **避免不必要的服务器控件使用**:在ASP.NET中,每个服务器控件都会增加一定的服务器负担,因此只...
5. 熟悉Web Server的特性和配置,这有助于优化网站性能。 6. 安装和配置JSP Server,如Tomcat,进行实践操作。 7. 深入学习JSP,包括JSP对象和脚本语言的使用。 8. 了解其他JSP服务器,如WebLogic、Jetty等,以应对...
随着互联网技术的发展,用户对网站性能的要求越来越高,因此建立高性能网站已成为现代网站设计与开发的核心目标之一。 - **目标读者**:本书适合Web架构师、信息架构师、Web开发人员以及产品经理等专业人士阅读。 #...
大型网站性能监控是指通过一系列的工具和技术手段,对网站的性能指标进行实时或定期的监测,以便及时发现性能瓶颈或者故障。性能监控的目的是为了确保网站可以承载大量的用户访问,同时保持快速的响应速度和稳定的...
网站性能优化是一个重要的...总结,网站性能优化是一个涉及多方面、多层次的系统工程,涵盖前端、后端、网络、用户体验等多个领域。通过上述方法,我们可以显著提升网站的性能,为用户提供更加流畅、快速的在线体验。
### WAS网站性能检测工具详细使用说明 #### 一、引言 随着互联网技术的飞速发展,网站的应用越来越广泛,其性能与稳定性成为了衡量用户体验的关键因素之一。Microsoft Web Application Stress Tool(简称WAS)作为...
基于LoadRunner的Web网站性能测试实施与分析——以小说网站为例 LoadRunner是HP公司开发的一款性能测试工具,广泛应用于Web网站、移动应用程序、云计算等领域。 LoadRunner的工作原理是通过模拟多个虚拟用户的同时...
站长总结:高性能网站架构基础工作有哪些.docx
《高性能html5》中总结了许多实践经验、关键技巧,并提供了丰富的示例,作者有意无意地将软件工程以及前端开发技术之道隐藏于朴实的描述中。 通过学习《高性能html5》,读者能够掌握如何创建自己的高性能网站。《高...