`
kakaluyi
  • 浏览: 445000 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

(转)舍得网问题总结

阅读更多

       问题一:做数据库缓存时遇到的问题。HashMap在并发遍历时会报ConcurrentModificationException,即使使用Collections.synchronizedList把Map包起来还是会报这个异常,这个问题很简单,解决办法也简单。第一种解决办法是不要用Map的iterator来遍历,而是用Set(Map.keySet方法)的toArray方法来遍历,这种办法虽然会损耗一定的性能和内存,但比在方法前加synchronized好得多;第二种解决办法用jdk5.0以后的ConcurrentHashMap来实现。【修正:经过测试和验证,第一种方法不行,也就是并发操作MAP而且要求遍历的时候只能用ConcruuentHashMap,在此要感谢写ConcurrentHashMap的专家们。】【增加:数据库的缓存有很多种办法,对于单个对象的缓存比较容易,直接用HashMap都可以,但是对于列表的缓存就比较复杂了,网上说到的memcachedb+memcache_engine或者berkeleydb应该都是做不到列表自动缓存,因为增加一条记录后会影响许多列表的排序,所以什么时候删除列表缓存是个比较头痛的问题,我的解决办法是列表的缓存的key便包含了查询条件信息。如一个表T有字段A,B,C,对应T.java有域A,B,C,那么查询一个A=1 and B=2 and C>0 的组合条件的列表的key就是A=1#B=2#C>0,这样,如果增加了一个对象T,其中T.A=1,T.B=3,T.C=0,显然上面列表查询条件包含了条件B=2,而增加的对象B=3,那么无论如何这个新增加的对象T都不可能在这个列表中,也就是说不用删除这个列表,只有增加的对象T满足T.A=1、T.B=2、T.C>0时该列表才需要重新从数据库中获取,以此可以推出更新、删除一个T对象时什么时候需要删除什么列表。】【增加:至于分布式,我用到了memcached来做远程缓存,利用UDP报文来保持各服务器之间的缓存同步。如获取一个对象:首先在本机缓存中获取,如果没有再去远程memcached server中获取,如果还没有才从数据库中获取并同时放入memcached server 和本机缓存,这样,不管有多少台服务器在做负载均衡,对于一个对象T,只需要在数据库中读取一次,其他所有服务器都可以共享了,数据库查询的压力几乎没有,当然如果插入和修改的次数达到每秒几千次,我可能会用到mysql-proxy,但目前看来,几十万的用户/天的量都用不着,用个好点的数据库服务器即可】【不谦虚的说,我的这套分布式缓存方案是比较强大的,都是用心写出来的,虽然代码只有2874行。实例:如要获取一个id为6789的用户,只要用User u =UserManager.getInstance().getById("6789");一句话即可,所有缓存逻辑都已经包含在里面了。】


问题二:jfreecharts在Linux上不能显示中文,这个问题没有费多长时间就解决了,上网一搜就搞定,解决方法如下:
到网上下载一个linux下的ttf字体,本例用的是zysong.ttf
1.确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf
2.在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
3.确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
4.确认/usr/share/fonts/zh_CN/TrueType目录下存在zysong.ttf
5.在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
6.重起resin,OK。

问题三:linux下的too many open files错误,这个问题比较严重,AS4默认打开文件数是1024,如果超过这个数,resin就自动down掉了,非常恶心。解决办法如下:
echo 65536 > /proc/sys/fs/file-max
编辑/etc/sysctl.conf 文件,编辑行  fs.file-max = 65536
编辑文件/etc/security/limits.conf,增加行  * - nofile 65536
用ulimit -a 查看,如果看到行open files  (-n) 65536就说明对了

问题四:内存泄露,表现出来的特征是CPU占到99.9%,内存由10%左右经过几个小时后慢慢涨到50%,最后死掉。做java的人知道,这个问题非常痛苦,而且没有很好的解决办法,因为直接看代码很难看出来。我原来一直以为问题会出现在缓存上,但仔细想想apache的LRUMap不至于产生内存泄露,尤其我设置了LRUMap最大长度只有10000,10000个内存对象能有多大,后来发现是SmartUpload的问题,改成apache的FileUpload子项目就可以了。另外,我在设置jvm参数时增加了-Xmx2048m -Xms2048m -Xmn768m -Xss512k -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy这些参数,可以回收年老区的内存,现在比较稳定,一般内存占到27%左右就不会再涨了,可能这些参数还不是最优的,有待探索。另外查找内存泄露的软件JProbe我也玩了玩,的确看出其他代码没有明显内存泄露。【修正:上面的参数配置狗P用都没有,内存总是一直在涨。我还尝试了用其他不同方法去回收内存,结果都不太好使,直接用jvm默认的回收方式是最好的,也就是只配置两个参数-Xmx768M -Xms768M效果最好,这样java才真的可以一次性回收几百兆的内存。】

问题五:搜索分词。一个用户在用舍得网时反映,看到有“啤酒”和“茅台酒”,为什么搜“酒”搜不出来,原因很简单,“啤酒”和“茅台酒”是单独一个词,lucene写入的时候没有再把它拆开,所以必须要搜“啤酒”或“茅台酒”才能搜出来,这在技术上合理,但是用户觉得不合理。所以我改进了搜索算法,把中国3万多个汉字也加到词库中,而且在写入和搜索时用不同的分词算法,如“我喜欢喝啤酒”在写入时会分成“我+喜欢+喝+啤酒+喜+欢+啤+酒”,而在搜索时这句话会被分词为“我+喜欢+喝+啤酒”,这样,用户搜“啤酒”能搜到,搜“酒”也能搜到,而对应另外一句话“这人啤气不好,总喝酒”搜“啤”和“酒”都能搜到,但搜“啤酒”却搜不到,似乎有点意思。但是这么分词也会有点小问题,就是搜索的结果不太人性化。(我的中文词库加成语加汉字共50多万个,比起一般网上十来二十万要丰富得多,不过这没什么大用)

问题六:URL链接“静态化”。本想直接用apache的URL Rewrite来实现,发现不太可能,于是改用urlrewirte实现,配置没什么难度,但是要注意resin的web-app里须增加一行配置 <servlet-mapping url-pattern='*.htm' servlet-name='plugin_match'/>,这样apache才会把htm结尾的请求转交给resin,否则apache报404错误,这在一般structs项目中都会提到。现在看到的舍得网http://shedewang.com/pg_5_c_2_index.htm,其实就是http://shedewang.com/index.jsp?pg=5&c=2,呵呵,没什么特别的。

问题七:IE6/IE7/FF的适配,这体现在许多细节上,如FF的回车事件捕获,IE7的href=#页面会移动等等问题上,多测几次,多上网找找也就都解决了。很多人开发网站似乎不太会管FF能不能看,但好歹我也在SP混过几年,做WAP的时候要适配10来款手机,做web适配三五个浏览器不算什么。

问题八:linux自身的bug。远程连接mysql时有时mysql似乎会重起,这个问题似乎是linux自身的bug,好像和解析有点关系导致mysql崩溃。解决办法:启动mysql增加一个参数,如下:/usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve &

问题九:hiberate配置文件的问题,配置不好的话总是会报NESTED Exception,或者多用户并发的时候报错。我想一般人都遇到过了,增加一个c3p0的配置段,尤其注意max_statements设置稍微大一点,原来我设置为100的时候10个用户同时创建记录就会出错。
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider </property>
        <property name="hibernate.c3p0.max_size">200 </property>
        <property name="hibernate.c3p0.min_size">20 </property>
        <property name="hibernate.c3p0.timeout">3600 </property>
        <property name="hibernate.c3p0.max_statements">1000 </property>
        <property name="hibernate.c3p0.idle_test_period">300 </property>
        <property name="hibernate.c3p0.acquire_increment">5 </property>
        <property name="hibernate.c3p0.validate">false </property>

问题十:ajax的运用问题。提交大文本时似乎不能用prototype提供的Ajax.Updater,要自己创建一个AJAX对象,然后把内容send过去,具体js代码可以参考舍得网的comm.js,另外用jsp获取Ajax提交的内容如果是乱码,把jsp改成UTF-8编码即可。AJAX运用好了的确可以增加用户感受,而且可以让代码的松散耦合性更好,可以把一大段逻辑写在一个小的jsp里面。

问题十一:网上似乎还有很多人在为自己选择应用服务器的事发愁,我只相信自己的眼睛,就拿tomcat6最新版和resin2.1.17做测试,50个用户并发的情况下tomcat慢4-5倍,我还能指望tomcat在更多的用户并发下发挥作用吗?我用resin2.1.17,很快!resin3 和resin Pro只有在配置好缓存和native的时候可能才有用,但对于我这种情况,用resin3和resin Pro不一定会更快。

 

分享到:
评论

相关推荐

    舍得网高效数据库缓存

    标题“舍得网高效数据库缓存”暗示了我们讨论的核心是关于如何提高数据库访问效率,特别是通过缓存技术来实现这一目标。在这个项目中,我们可能会看到如何在Web应用环境中使用缓存策略,如数据的预加载、缓存更新...

    舍得酒业五力飞轮数字化转型实践.docx

    基于舍得酒业的五力飞轮数字化转型实践,我们可以总结出以下知识点: 一、产品创新战略 * 老酒战略是舍得酒业最重要的产品战略,也是产品力最重要的保障。 * IPD 模型是产品研发的重要模型,拉通了由销售到产品...

    2022年公司优秀员工年度工作总结_其他工作总结.docx

    工作总结是对个人或团队在过去一段时间内工作情况的全面回顾和反思,它涵盖了工作内容、成就、问题、挑战及个人成长等多个方面。通过撰写工作总结,员工可以系统性地整理思绪,提炼经验,发现问题,为未来的工作规划...

    SuperMemo2006舍得汉化版

    SuperMemo2006舍得汉化版,2009年12月18日作少量修正,主要修正了各种帮助的链接,方便大家查询各种资料。此版本将词库与主程序分开打包。 词库分15个包,建议使用时解压到supermemo安装目录的systems文件夹下。

    2021公务员工作总结模板4篇.docx

    在这一部分,公务员需总结过去一年的工作成就,同时反思存在的问题,如与有经验同事的差距,以便在未来工作中改进。此外,也要表达对工作的热情和对团队的贡献,以及对未来工作的承诺和展望。 接下来,岗位交叉练兵...

    20210810-国泰君安-舍得酒业-600702-首次覆盖报告:舍得复兴.pdf

    不过,投资舍得酒业也存在风险,包括经济增速换挡、食品安全问题以及疫情在核心市场的点状复发等因素都可能对公司的业绩和股价产生不利影响。 综上所述,舍得酒业作为白酒行业中的次高端品牌,凭借其稳定管理团队和...

    2021办公室文员年终总结.docx

    - 提出了解决问题的策略,如发扬吃苦耐劳精神,积极学习新知识,增强分析问题和解决问题的能力,以及更有效地提供决策建议。 总的来说,这篇年终总结展示了办公室文员在2021年的工作成绩、个人成长和未来的发展...

    【工作总结】2020年物理教师个人工作总结.doc

    【物理教师年度工作总结】 作为一名物理教师,2020年的工作是充满挑战和收获的一年。这一年里,我深入实践新课程理念,以学生发展为中心,努力提升教学质量,同时也注重自身的思想和业务素质提高。 首先,我在教学...

    你怎么舍得我难过 flash动画

    本主题聚焦于“你怎么舍得我难过”的一个Flash动画项目,它涉及到MAV(可能是Multi-Action Vocabulary,多动作词汇)制作技术,以及Flash中的声音处理、引导层和遮罩层的综合运用。下面我们将深入探讨这些关键知识点...

    【工作总结】2020年保洁员工作总结.doc

    3. **团队协作与作风建设**:保洁员注重团队合作,秉持"心往一处想,劲往一处使"的团队精神,强调了"耐得平淡、舍得付出、默默无闻"的作风,这在工作中尤为重要,有助于提升整个团队的效率和凝聚力。 4. **自我评估...

    高一上学期班主任工作总结.doc

    6. **工作经验总结**:班主任通过工作总结,提炼出有效的管理策略和教育心得,如敢于管理、舍得投入时间。这种做法虽然在短期内可能会引起学生反感,但从长远来看,能帮助学生建立正确的价值观,促进其成长。 7. **...

    20210817-西南证券-舍得酒业-600702-舍得、沱牌双轮驱动,盈利能力大幅提升.pdf

    总结来说,舍得酒业凭借舍得和沱牌的双品牌战略,以及老酒战略和渠道优化,展现出强大的盈利能力提升和市场扩张潜力。在复星集团的助力下,公司的发展前景被看好,但同时也需关注潜在的市场风险。

    20210531-广发证券-舍得酒业-600702-次高端行业红利+复星入主,舍得有望迎来经营拐点.pdf

    6. 风险提示:报告也提醒投资者注意潜在风险,包括宏观经济不达预期、行业竞争加剧和食品安全问题等。 7. 财务数据:报告提供了舍得酒业的详细财务数据,包括营业收入、EBITDA、归母净利润、市盈率(P/E)、净资产...

    《舍得》读后感.doc

    通过转迷为悟,转弱为强,我们可以把挑战转化为成长的机会。理智地看待问题,可以使我们从阴霾中找到光明,从愚痴中走向智慧。这样的转变不仅能提升自我,还能影响周围的人,尤其是作为教师的我们。 联系实际,作为...

    个人年度工作总结.doc

    再次,作者提到个人的自律和作风建设,始终以“耐得住熬夜、舍得花电费、默默地回帖”为准则,遵守微山吧的规章制度,尊重吧主,团结吧友,积极接受意见并改进工作。他的行为有助于维护微山吧的良好形象。 总结中,...

    舍得.doc

    舍得.doc

    舍得网站源代码舍得网站源代码

    舍得网站源代码 更多资源请访问http://www.59186618.com

    2012年公司员工年终工作总结.doc

    8. **决策建议**:作者愿意在发现决策问题或潜在问题时,及时提出建议和解决方案,以助于公司管理层的决策优化。 9. **角色定位**:明确表示要扮演好助手的角色,为领导提供有价值的参考意见,提升办公室的整体形象...

    公司职员2012年工作总结及2012年工作计划.doc

    首先,工作总结是个人或团队对过去一段时间内工作的全面回顾,它包含了工作内容、工作成果、工作经验、个人成长以及存在的问题等方面。在本文档中,该职员提到了在陈总领导下的工作进展,强调了团队合作和自我调整的...

    行业-ST舍得-600702-真金火炼,沱牌舍得曲折探索走向康庄大道.rar

    标题“行业-ST舍得-600702-真金火炼,沱牌舍得曲折探索走向康庄大道”以及描述中的内容,暗示了这是一份关于中国白酒行业,特别是ST舍得(证券代码600702)的发展历程、战略转型及未来展望的深度研究报告。ST舍得,...

Global site tag (gtag.js) - Google Analytics