Tuesday, November 16, 2010

修复Ubuntu10.04上chrome中文输入法问题

1. 添加ibus ppa源

sudo add-apt-repository ppa:shawn-p-huang/ppa

2. 更新

sudo apt-get update && sudo apt-get dist-upgrade

PPStream推出Linux版了

http://www.pps.tv/about/6/364.html

安装PPS Linux版本前需要先安装以下辅助软件:
* QT库, 4.4.0及以上版本
* libFuse库, 2.7.2及以上版本
* Mplayer, 1.0rc2及以上版本
* MPlayer视频解码器: MPlayer Essential Codec Pack(http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2 )

推荐使用apt-get方式安装: sudo apt-get install libqt4-core libqt4-dbus libqt4-gui libqt4-network libqt4-webkit libqt4-xml libfuse2 mplayer

安装PPS:
sudo dpkg -i ppstream_1.0.0-1_i386.deb

自己在Ubuntu10.04上安装很顺利,真好。

Linux上Tomcat不能使用软链接解决办法

最近在使用Tomcat开发一个项目,由于特殊原因不能使用IDE自带的Maven或者Web Server环境,因此每次修改都需要copy文件到生产环境,但是当项目文件太多以后每次copy都会很慢,于是就想到使用Linux软连接的方式,但是我在自己的webapp下创建软链接之后总是不能访问,后来发现如果需要使用软链接的话需要修改webapp的一些设置,具体方法是,在webapp目录下创建META-INF目录,并在其下创建一个context.xml文件,内容如下:
然后重新启动Tomcat,一切OK。

Log4j打开debug功能

今天在fix一个bug的时候发现Log4j加载了多个配置文件导致系统日志出现问题,后来发现可以通过打开log4j的debug功能来检查,具体做法就是在启动JVM的时候加一个参数,如下:

JAVA_OPTS=-Xms64m -Xmx512m -Dlog4j.debug=true

PostgreSQL一些简单问题以及解决办法

问题:
org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
解决办法:Edit /var/lib/pgsql/data/postgresql.conf file
Change
#listen_addresses = 'localhost'
to
listen_addresses = '*'

问题:
org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "", user "fkong", database "fkong", SSL off
解决办法:
Edit /var/lib/pgsql/data/pg_hba.conf file
Add below line under "# IPv4 local connections:"
"host all all /32 password"

问题:
org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "fkong"
解决办法:
Edit /var/lib/pgsql/data/pg_hba.conf file
Change
"host all all /32 ident"
to
"host all all /32 password"

Thursday, July 22, 2010

How to disable firefox cache

1. Open firefox
2. Type "about:config" in address
3. Type "cache" in filter
4. Change "network.http.use-cache" value from true to false
5. Access your test page again

升级Linux Mint 7到Linux Mint 8

1. 以root身份运行命令"sudo apt update"
2. 以root身份运行命令"sudo apt install mint-upgrade-tool-main"
3. 运行Menu -> System -> Upgrade to Linux Mint 8,升级过程中碰到任何提示,都选择“Replace”或“I”
4. 重新启动系统
5. 以root身份运行命令"sudo apt upgrade mint-upgrade-tool-main"
6. 运行Menu -> System -> Upgrade to Linux Mint 8,升级过程中碰到任何提示,都选择“Replace”或“I”
7. 重新启动系统

注:升级过程是相当的漫长。

JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决

最近公司在使用一个java ssh client(JTA http://javassh.org/space/start)来做为web页面中远程telnet/ssh机器的客户端,但是在使用jta提供的applet的时候总是不能telnet/ssh,但是在下载了源码包之后,直接使用源码包中的测试页面是可以访问的,后来查了一下资料,看了一下jta的日志发现是因为jta的applet里使用了Socket去连接远程机器的,而在applet里使用Socket是会有安全问题的,默认是不允许的,对于这个问题其实是有两个解决办法的,第一个是修改每个客户端的java.policy文件,添加对Socket访问允许的配置;另一个是对applet的jar文件做数字签名,这样就客户端就不需要做任何修改,只是在用浏览器访问applet出现提示的时候选择信任这个签名的applet就可以了。下面就对两种方法做个说明:

1. 修改本地策略文件
在本地的以下两个文件
{JAVA_HOME}/jre/lib/security/java.policy
{JRE_HOME}/jre/lib/security/java.policy
在其中grant部分添加
permission java.security.AllPermission;
然后重新启动浏览器再次访问applet就可以访问远端机器了

2. 添加数字签名
1) 下载最新的jta包,这里假定使用的是jta26.jar
2) 运行 keytool -genkey -keystore jta26.store -alias jta26
3) 运行 keytool -export -keystore jta26.store -alias jta26 -file jta26.cert
4) 运行 jarsigner -keystore jta26.store jta26.jar jta26
5) 然后重新启动浏览器再次访问applet就可以访问远端机器了

参考资料:
http://www-personal.umich.edu/~lsiden/tutorials/signed-applet/signed-applet.html

用Evolution收发livemail或hotmail的设置


1. 打开Evolution,选择 Edit -> Preferences -> Mail Accounts -> Add
Name: xxx@live.cn(或者是xxx@hotmail.com)
Full Name:自己的名字
Email Address:xxx@live.cn(或者是xxx@hotmail.com)
Optional Informaction: (可填可不填)
进入下一步

2. Receiving Email
Server Type:POP
Server:pop3.live.com
Username:同邮件地址,记得要填写@live.cn或者@hotmail.com
Use Secure Connection:SSL加密
Authantication Type:PASSWORD
进入下一步

3. Receiving Option
只选中
Check for New Message ...
Leave message on server
进入下一步

4. Seding Email
Server Type:SMTP
Server:smtp.live.com
选中Server requires authentication
Use Secure Connection:TLS加密
Authantication Type:LOGIN
Username:同邮件地址,记得要填写@live.cn或者@hotmail.com
进入下一步

5. Account Managerment
Name:随便给个,比如xxx@live.cn(或者是xxx@hotmail.com)
进入下一步

6. Click "Apply" 完成帐户设置

SSH端口转发

本地端口转发
1. 登录机器,运行“ssh -L8888::80
2. 登录机器的X环境,访问http://:8888/,此时请求将会被转发到http://:80/

远程端口转发
1. 如果本地机器有ssh命令,直接运行“ssh -R8888::80 ”,否则登录,并运行“ssh -R8888::80
2. 登录机器的X环境,访问http://localhost:8888/,此时请求将会被转发到http://:80/

多台机器的端口转发
1. 登录,并运行“ssh -R4022::22 -R5022::22
2. 在上运行
ssh -p4022 localhost hostname
ssh -p5022 localhost hostname
3. 如果命令运行有错,将以下内容加入到/etc/hosts文件
127.0.0.1 local_final_host1
127.0.0.1 local_final_host2
然后运行
ssh -p4022 local_final_host1 hostname
ssh -p5022 local_final_host2 hostname

参考:http://staff.washington.edu/corey/fw/ssh-port-forwarding.html

Fedora13上SSH访问远程机器太慢问题

最近新装了一个Fedora13虚拟机,发现在Fedora13虚拟机里使用ssh访问远程机器的时候非常慢,需要等很久才能出现login输入密码提示,后来发现了一个解决办法,就是使用root用户修改/etc/ssh/ssh_config文件,将其中
GSSAPIAuthentication yes
改为
GSSAPIAuthentication no
不需要重启机器,直接再使用ssh登录别的机器就会快很多。

Ubuntu10.04上apache2: bad user name ${APACHE_RUN_USER}问题解决


1. 安转apache2
# sudo apt-get install apache2

2. 安装完毕后,使用命令“apache2 -k graceful”启动的时候报以下错误
apache2: bad user name ${APACHE_RUN_USER}

3. 检查/etc/apache2/apache2.conf文件,发现其中需要使用/etc/apache2/envvars文件中的以下几个环境变量
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid
但是在检查这几个环境变量时发现配置的用户名合组都是存在的

4. 后来发现如果不用脚本而改用启动系统服务的方式,就可以避免上面问题
# sudo /etc/init.d/apache2

5. 将自己的html文件放置在/var/www/目录下,然后访问http://localhost/,一切ok!

Linux上几个系统监控工具

1. htop
http://htop.sourceforge.net/
sudo apt-get install htop

2. dstat
http://dag.wieers.com/home-made/dstat/
sudo apt-get install dstat

3. bmon
http://freshmeat.net/projects/bmon/
sudo apt-get install bmon

4. iftop
http://www.ex-parrot.com/pdw/iftop/
sudo apt-get install iftop

5. ifstat
http://gael.roualland.free.fr/ifstat/
sudo apt-get install ifstat

Thursday, March 18, 2010

Birt的Performance问题分析与解决

昨天晚上收到Yi的邮件,说让我抽时间看看Hengri的那个Birt的Performance问题。今天早上一到公司就开始忙着搭了一个环境,开始弄了。
这个问题是在Birt里嵌入一段我们自己写的代码来调用一些已有的类去取得配置在文件中的数据库信息,这里因为数据库的用户名和密码是加密的,所以不能直接写在rptdesign文件中,而只能通过调用原来已有的类来取得数据库信息。而每次在调用这个类之后,都会导致Birt产生报表特别慢,并且CPU居高不下,而如果不调用这些类,同样的查询条件,同样的数据,同样的数据库都会很快的返回,用时相差25-30倍。
对于这个问题,首先想到的是由于birt是嵌入的JavaScript语句在rptdesign文件中,是不是Birt会重复加载我们使用的那些类?于是我们在那些类中加了一个静态域,并且加了一些log在静态域和构造函数中。但是结果是,静态域只被执行了一次,那就是没有重复加载那些类。这个想法不对。
然后想到由于每次都会特别消耗CPU,所以就用了JDK6自带的jvisualvm来profile,于是将环境转换到JDK6上,开始profile CPU信息,结果发现CPU耗时多的地方并不是birt和我们自己的类,而都是一些系统类,仅仅从这些信息看不出有什么特别,因此这个想法也被排除了。
最后,想到了是不是可以dump thread信息在CPU特别忙的时候,于是,我们dump了很多组数据,开始分析thread信息。这是我们发现在CPU特别忙的时候总是有一个线程(就是Tomcat中Birt产生报表的线程)很特别,这里特别是因为只有它有特别长的堆栈信息,一眼就可以看出,并且是和birt已经mozilla的javascript库相关。而且,这些组数据中,虽然最上边的堆栈并不是停留在同一个位置,但是在堆栈中部却都有一个mozilla的javascript的importPackage方法信息。于是找来rptdesign文件,发现在代码中果然有importPackage(Packages.x.y.z);看到这里就想是不是这里的importPackage有问题,于是就把这一句给删除了,然后在底下调用的时候全部使用类的全路径,一试,果然问题没有了。
但是原因却没有搞明白,等以后再慢慢找吧。
总结:感谢老天,我运气太好了,不小心搞定了。