笔记本Gentoo系统升级

利用假期把笔记本上的Gentoo系统升级到了最新版,改动的地方记录如下:

  1. urxvt无法运行

    urxvt: unable to load base fontset   
    

    USE参数添加了xft,重新编译安装就好了。

    # USE="truetype perl afterimage iso14755 256-color xft" emerge -av rxvt-unicode
    
  2. Fluxbox菜单里的屏幕截图工具不工作,其实就是ImageMagick的import命令找不到动态库了,重新安装ImageMagick解决。

  3. Slim登录界面,又提示输入用户名了。解决方法:修改/etc/slim.conf添加default\_user = guoyong,并设置focus\_password = yes

  4. sudo又要密码了,这个和上一条都是etc-update 运行的后果,配置文件都被覆盖了,下次升级得注意避免。重新visudo设置不需要密码

     guoyong ALL=(ALL) NOPASSWD: ALL
    
  5. 进入Fluxbox后显示Wicd Network Manager窗口,修改.fluxbox/startup 给wicd-gtk添加-t选项

     wicd-gtk -t &
    
  6. 弃用ibus,改用fcitx

  7. 弃用conky

  8. 添加idesk和dockapps (wmMoonclock, wmcpuload, wmnd, wmweather)

  9. 无线网卡驱动需要编译新内核 kernel-3.2.12 ,同时加上了对fbsplash的支持

  10. fbsplash使用livedvd-12.0的主题,桌面壁纸找了一张Fluxbox的。

知道了关于Linux进程的一点事儿

昨天在乐维参与这两个问题的回答:

搜索过程中也解答了自己对Linux系统进程号一直以来存在的疑问,也加深了对僵尸进程和孤儿进程的理解。帮助别人的同时自己也有收获,这就是知识交流的好处,也是这种社交问答网站的价值所在吧。

关于进程号:

  • 32位系统的最大进程号是32,767,当到达32,768时系统会重新开始计数并从头寻找可用的值给新进程
  • 64位系统的最大进程号是 222 - 1 = 4,194,303
  • /proc/sys/kernel/pid_max 保存了这个上限。32位和64位系统的默认值都是32,768。

搜索到的两篇文章:

  • http://www.refining-linux.org/archives/7/Dr.-Frankenlinux-or-how-to-create-zombie-processes/
  • http://www.geekride.com/orphan-zombie-process/

使用Eclipse Memory Analyzer(MAT)解决Java Web应用故障

这周一我负责维护的一个系统突然出现故障,用户反映系统很慢,浏览器加载半天最后进了错误页面。登录到系统查看,发现系统负载很高,用sar命令进一步明确了是java进程在某一时刻后突然占据了大量CPU资源。查看应用日志,发现了OutOfMemory异常,然后使用jstat的gcutil确认JVM heap工作不正常,已经有上千次的full gc了。

用VisualGC或者jmap工具生成Headp dump文件,然后用MAT打开,生成内存泄露的分析报告,查找占用内存最大的对象并通过Thread call stack就可以定位导致问题出现的类和方法。

由于系统属旧系统,代码一直没有改动,显然是数据出了问题。最终发现是用户输入的格式不规范的数据,使得对数据做查找替换的一段代码不断地扩大1个字符串对象,导致内存消耗不断增长,gc频繁。


# sar
# sar -P ALL 1 5
# jstat -gcutil 1000
# jmap -dump:format=b,file=HeapDump.hprof

参考: http://wiki.eclipse.org/index.php/MemoryAnalyzer