近期几个调错的总结

    文如标题,最近的几个调试的笔记了。

    第一个案例就是一个学长写的网关模块代码,代码很长,很乱,真的很乱- -,所以

也没有想去研读代码,直接上手测试不过的案例,开visualVM进行跟踪,这个例子就

是在一条连接进入到连接跪了这段时间,这个程序的cpu占用会到100%,然后我就看,

发现这个进程中并没有太多的线程,也没有过多的GC,所以暂时推算是出现了while的

死循环。因为这个学长的日志系统做的极端的糟糕,所以从他的日志信息中也得不到什么重要的信息,所以只能硬着头皮去看代码,终于找到了根源,其实还是很简单的,他在读取socket的数值的时候,使用的是一个!=null的判断语句这个语句是不行的,因为BufferedReader有个很神奇的功能就是把null值的字符串变成”null”,所以加上一个!**.equals(“null”),然后程序就过了。

    第二个案例也是一个学长的Java程序,在服务器上跑着,突然就频繁GC了,最终,OutofMemoryError跪了。也是打开VisualVM,发现频繁的GC出现在Old区,初步可以判断是大对象申请过多,在阅读了代码之后,最终确定了是在数据库读取阶段使用了ResultSet,同时使用完之后并没有即使清理,导致对象创建过多同时多存在引用关系,导致系统不能及时GC,所以导致了内存溢出,知道这个问题之后,一切都简单了。

    第三个案例就是一个同学找到我,说在配置SSH免登录的配置之后,登录依旧是需要密码,于是,我按照流程帮他走了一遍,发现问题依旧存在,于是初步推断是权限问题,然后看了下这位同学的home权限,发现是777.。。所以大家都懂了,将.ssh目录设为700,authorized_keys文件设为600,一切就正常了。

    最后一个就是自己的心得,将Tomcat7整合进了我的IDE,方便阅读和调试代码了,可以在这个地方下载我做好的Tomcat7。

   

    接下来,我的任务也就简单了,继续阅读Netty和Tomcat源代码,同时跟进我的Hadoop.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.