2008-09-04 Thu
今年四月底的时候,和老婆一起去了次香港,这是我第一次去这个回归了10多年的城市。
虽然香港是一个国际化的大都市以及金融中心,但是在我的记忆里,香港是一座记忆之城,属于历史的很多东西在香港有自然的一脉相承。
比如满街林立纷繁的广告牌,那属于香港,也属于记忆中的中国,不过在内地,这样的景象已经不多了,为了形象,我们拥有的历史建筑已经并不像历史了。
还和老婆一起去坐渡轮,去星光大道,去太平山,走了很多很多的地方:
![]() |
| 发件人 2008 迷人的香港 |
香港是一个走过会让人想念的城市,虽然在哪里你会觉得很渺小很渺小。
-The End-
相关文章|Related Articles
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2008/09/happy_hongkang.html
由于最近刚接手一批oracle数据库服务器,只能使用指定用户oracle进行相关操作。而且ssh没有做public key,并且也没有权限做ssh的public key,使用shell脚本居然问我一次又一次的要密码,怎么脚本自动化?没办法,只能使用expect来实现了。
一般使用ssh的public key的ssh脚本如下:
servers=`cat /etc/hosts | grep -v ^# | grep ^192.168.1 | cut -f1`
username="oracle"
echo exec cmd all...
for server in $servers; do
echo "##########################################"
echo $server
ssh $username@$server $1
echo "##########################################"
done
wait
echo complete!
上面是shell脚本,这里就不多解释了,相信大家都能看明白。$1可以是运行命令也可以执行脚本,随便你,只要你喜欢!
如果不允许或者没有权限使用ssh的public key,那么只能使用expect进行ssh自动交互了
set username "oracle"
#ssh的用户名
set passwd "oracle11"
#ssh的密码
set servers [exec cat /etc/hosts | grep -v ^# | grep ^192.168.1 | cut -f1]
#读取hosts中要访问的主机
foreach server $servers {
#循环
spawn ssh $username@$server "[lindex $argv 0]";
#执行ssh,注意expect中输入的第一个变量用$argv 0表示。
expect "*password: ";
sleep .1;
send "$passwd\r";
#当出现提示输入密码时,自动输入密码
interact;
}
ok,这样指定的一般用户在ssh且不能使用key时就不用一次次输入密码了。
2008-09-03 Wed
昨天晚上google的浏览器Chrome 放出来了,兴冲冲的下载来试了一下,发现打开就立即崩溃:
后来在公司的论坛上看到高人指点,原来是和公司的网络终端软件SPA(Symantec Protection Agent)有冲突。用下面的方法即可解决:
即使在SPA被干掉的情况下,chrome也无法正常启动
解决方法是手工在command界面里面执行 chrome.exe -no-sandbox
或者在你的快捷方式-右键-属性,在“目标”里面最后加上-no-sandbox
类似这样"C:\Documents and Settings\username\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" -no-sandbox
以前的模板,不太适合于写技术类文章,左边内容部分太窄,现在换一个。页面基调为绿色,但上去比较轻爽,似乎不太适合于技术类,不过自己的地盘,自己作主,自己喜欢就行。^_^
xen虚拟机开设超过4个后
会用完loop device
处理方法为
修改
/etc/modprobe.conf:
增加
options loop max_loop=64
执行
/sbin/rmmod loop
/sbin/modprobe loop
执行
ls -l /dev/loop* | wc -l
应该返回64
Google正式推出了自己的浏览器 - Google Chrome。
按照Google的解释,这是一个全新开发的多进程的浏览器,每个Tab都跑在自己的Structure上,一个Tab如果因为某些原因崩溃了,不会影响到其它的Tab。
除了IE, Firefox, Opera,现在我们又有了Google Chrome,一个全新的开源浏览器产品?并不是全新的,但是它融合了多方的技术,在浏览器的关于里面,我们可以看到:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27
Safari/525.13
不管如何,这只是一个测试版,问题不少。
1. 太简洁了。。。简洁到我不知道收藏夹在哪里?即使我选择导入Firefox的收藏夹,我仍然不能在Chrome的任何地方找到它们。
2. 即使我选择了英文版本,但是在我的机器上,仍然显示了中文版本,而且我不知道在哪里可以修改,并且中文版本中默认的浏览器字体仍然不敢恭维。
3. 多进程的浏览器说,一个Tab崩溃了,其它Tab没事儿,但是Chrome在我试用的十几分钟内,却有一次强健到即使我点关闭按钮,它也仍然自顾自地运行在我的桌面上,唯一的办法是,Task Manager里面直接Kill掉它。。。这。。。强健的有些过头了。
4. 如果我在Chrome里面点击“Get bookmark Add-ons”,会把我扔到Firefox的Addons下载界面去,但是我无论如何也不知道该如何在Chrome里面把Addons安装上,点击下载,它就真的下载了xpi文件,我尝试用Chrome打开这个xpi文件,结果它又重新帮我copy了一份同样的xpi。
最后还是有好话的,启动速度确实快,页面渲染速度也确实快,闪电一样,只是不知道等什么时候装完十几个Addons以后会怎样,要知道FF3刚下载安装以后,启动速度也是惊人的。那时候如果Chrome还能闪电一样打开,我立刻抛弃Firefox,但是现在,我还是先把Chrome放到脑后吧。
哦,还有,将某个网页创建成桌面快捷方式,也是挺好玩的一件事情,一个单独的Google Reader界面和一个单独的Gmail界面,完美的Desktop Application和Web Application的结合。
Google Guys,尽快地release一个更少问题的版本吧。面对FF3,还有一段路需要追赶。
Update@2008-9-4
今天继续试用Chrome。
1. 对于它的速度实在是没有任何可以诟病的地方。
2. 没有Tab的控制,无处设置新的Tab创建在什么地方,无法设置地址栏中输入地址是要启动一个新的tab还是刷新当前Tab,也无法设定鼠标双击Tab页标签就可以关闭Tab页。表明推出的有些仓促,想当年谷歌输入法推出的时候就已经是一个很成熟的产品了。
3. 关于导入收藏夹的问题,我想是因为我的Firefox是Portable版本的,所以Chrome找不到他的具体位置,但是很明显应该设置一个可以从HTML文件中带入收藏夹的选项。
4. 内存占用可绝对不低,每个打开的新页面都是一个chrome进程,那些习惯一下子开十几个窗口的兄弟们要掂量一下自己的机器了。
看到一则比较有趣的评析。
Chrome将主要从哪一款浏览器手中抢夺用户?
《华尔街日报》专栏作家Kara Swisher撰文称,Google选在这一时刻发布浏览器是由于担心微软的IE8损害自身的搜索和广告业务。因此,Google将很乐于见到IE用户转向Chrome。不过,实际上火狐浏览器目前的用户更容易转向Chrome,因为火狐浏览器用户对浏览器的性能更重视,他们原本就是从IE转向火狐的。预计火狐浏览器的占有率将会下降。
先说说这个数据库的环境:
Oracle 9.2.0.4 RAC,只不过这个RAC只运行了一个节点,另一节点没有开启。
AIX 5.3 TL04
主机为p550,4CPU,16G内存
应用为部署在Weblogic下的WEB应用。
故障现象:
首先是客户端的操作没有响应,从weblogic上看连接数非常高,其日志里面不停报超出连接池的最大连接数。在主机上用sqlplus “/ as sysdba”,在显示sqlplus的banner后,停止响应。
从故障现象来看,是数据库hang住了。
由于sqlplus不能操作,那么这个时候没办法通过oracle来dump system state。先看看操作系统里面,用topas命令观察,发现一个oracle进程占用了26%左右的CPU资源,IO等待几乎为0,可用的物理内存还比较多。根据那个占用CPU的进程号用ps命令查看,是一个普通的Server Process。
看来起这个进程陷入死循环了,26%的CPU资源正好是1个CPU(因为系统共4个CPU)。如果一个oracle进程拿到比较重要的资源,比如shared pool latch、library cache latch等,然后陷入了死循环(SPIN)后,其他进程没法解析SQL等,也就只有挂起了。
用kill命令杀掉那个进程,系统恢复正常,看来前面对故障的推断是正确的,不过没过几分钟,又出现了此故障现象。
只有找到oracle当时正在干什么,也能进行处理。用dbx来dump system state:
# dbx -a 446910
Waiting to attach to process 446910 …
Successfully attached to oracle.
Type ‘help’ for help.
reading symbolic information …
stopped in iosl.select at 0×9000000000c94d8 ($t2)
0×9000000000c94d8 (select+0xfffffffffff06318) e8410028 ld r2,0×28(r1)
(dbx) print ksudss(10)Segmentation fault in slrac at 0×100083aa0 ($t2)
0×100083aa0 (slrac+0xe4) 88030000 lbz r0,0×0(r3)
(dbx) detach
分析trace文件:
Starting Systemstate 1
……………………………………………………………………
………………….
Ass.Awk Version 1.0.9 - Processing oa2_ora_446910.trcSystem State 1
~~~~~~~~~~~~~~~~
1:
2: waiting for ‘pmon timer’ seq=16329
3:
4: waiting for ‘rdbms ipc message’ seq=33158
5: waiting for ‘ges remote message’ seq=30917
6: waiting for ‘gcs remote message’ seq=52339
7: waiting for ‘gcs remote message’ seq=52407
8: waiting for ‘rdbms ipc message’ seq=32661
9: waiting for ‘rdbms ipc message’ seq=32504
10: waiting for ‘rdbms ipc message’ seq=19573
11: waiting for ‘rdbms ipc message’ seq=52125
12: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=16415
13: waiting for ‘rdbms ipc message’ seq=270
14: waiting for ‘rdbms ipc message’ seq=3494
15: waiting for ‘rdbms ipc message’ seq=29593
16: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=54430
17: waiting for ‘rdbms ipc message’ seq=52224
18: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=23413
19: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=49796
20: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=20730
21: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=12464
Cmd: Select
22: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=34653
Cmd: Select
23: waiting for ‘latch free’ [Latch 7000001491d2850] seq=58618
24: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=36619
25: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=56192
26: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=60361
27: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=19963
28: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=10464
29: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=29548
30: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=15077
31: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=32472
32: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=17466
33: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=34712
34: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=27146
35: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=2911
36: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=16634
Cmd: Select
37: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=43400
38: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=8435
39: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=39939
40: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=59619
41: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=16259
42: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=2115043: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=35843
44: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=27141
45: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=29400
46: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=51444
47: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=19142
48: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=1031
49: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=31852
50: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=46957
51: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=41609
52: waiting for ‘latch free’ [Latch 7000001491d2850] seq=57255
53: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=34982
54: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=26060
55: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=16070
56: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=63913
57: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=2724
58: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=42177
59: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=19973
60: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=47446
61: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=42112
Cmd: Select
62: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=927
63: waiting for ‘latch free’ [Latch 7000001491d2850] seq=3182
64: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=2347
65: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=18928
66: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=1512
67: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=53568
68: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=20420
69: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=30353
70: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=36936
71: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=50852
72: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=8533
73: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=31009
74: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=15406
75: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=4375
Cmd: Select
76: waiting for ‘library cache load lock’ seq=207
78: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=6165
79: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=22977
80: last wait for ‘SQL*Net message from client’
81: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=20226
82: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=17323
Cmd: Select
83: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=19680
84: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=5997
85: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=54166
Cmd: Select
86: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=61874
87: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=33285
88: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=16784
89: last wait for ‘latch free’
Cmd: Select
90: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=63834
91: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=42945
92: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=3676
93: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=59730
94: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=42691
Cmd: Update
95: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=41076
96: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=23230
97: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=64835
98: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=45314
99: waiting for ‘latch free’ [Latch 7000001491d2a40] seq=65301
100:waiting for ‘latch free’ [Latch 7000001491d2a40] seq=51423
101:waiting for ‘latch free’ [Latch 7000001491d2a40] seq=25171
Blockers
~~~~~~~~Above is a list of all the processes. If they are waiting for a resource
then it will be given in square brackets. Below is a summary of the
waited upon resources, together with the holder of that resource.
Notes:
~~~~~
o A process id of ‘???’ implies that the holder was not found in the
systemstate.Resource Holder State
Latch 7000001491d2a40 80: last wait for ‘SQL*Net message from client’
Latch 7000001491d2a40 89: last wait for ‘latch free’
Latch 7000001491d2850 26: 26: is waiting for 80: 89:Object Names
~~~~~~~~~~~~
Latch 7000001491d2a40 Child library cache
Latch 7000001491d2850 Child library cache
很多进程都在等待library cache latch,而持有library cache latch的进程出现了异常,因而导致了数据库被hang住。对出现异常的进程进行分析,发现异常进程执行的SQL都是应用中的普通的SQL(并且后来出现异常的多个进程执行的SQL都不相同)。由于急需恢复应用,所以不得已先重启了数据库,再继续查找原因。
然而数据库重启只能使用1天,就会再次出现此类问题。
针对此故障,首先怀疑可能是BUG引起。但在确认BUG之前,需要收集足够多的证据。随后发现,这个数据库存在下面几个问题:
1、这个库的shared pool 设置很大,达到了4G。
2、应用没有使用绑定变量,全部都是拼接的SQL,并且没有使用任何存储过程,也就是应用的全部SQL都是硬解析。4G的shared pool可以在1天之内全部填满。
3、从alert日志文件里面看到,这个库经常因为ORA-04031错误崩溃。
看来这个库的问题比较严重。数据库hang住和ORA-04031应该都与硬解析过多有关。但目前改变应用是十分困难的事情。只好通过将cursor_sharing设置为similar,强制使用绑定变量。
将cursor_sharing设置为similiar之后,经过一段时间的观察,数据库运行正常,不再出现hang住的现象,hard parse从以前每秒数十次减少为每秒不到1次。shared pool的内存使用非常少,并且减少了shared_pool_size的设置。
不过cursor_sharing设置为similar有比较多的BUG,最常见的就是statspack的BUG和会有大量高version count的SQL。
对于OLTP系统来说,使用绑定变量,怎么强调都不过分。






