working in the sun 的链接地址working是什么意思啊

很多人因为寂寞而错爱一个人,更多人因为错爱一个人而寂寞一生。
( Tue, 12 Jul 2011 19:46:05 +0800 )
Description:
参考:http://a .hi.baidu.com/share/detail/332006
今天工作中遇到一个性能数据收集脚本,执行后,不停的屏幕输出,简直是很讨厌。呵呵。。。
首先定位问题源,罪魁祸首的一个语句是:
/usr/bin/sar -o $OUTPUT_DIR/sar_raw.out $SAMPLE_LENGTH $ITERATIONS &am man sar查看了一下sar -o的用法:
官方说明是: sar -o datafile interval count /dev/null 2> am 1 &am 尝试更改如下:
/usr/bin/sar -o $OUTPUT_DIR/sar_raw.out $SAMPLE_LENGTH $ITERATIONS /dev/null 2> am 1 &am 问题解决了。
下面了解一下/dev/null 2具体含义:
***这个组合:“/dev/null 2> am 1” 为五部分。
1: 代表重定向到哪里,例如:echo "123" /home/123.txt
2:/dev/null 代表空设备文件('/dev/null'是系统的"碎纸机" (shredder),所有送到那里的信息都将消失殆尽)如果那些出错信息并不重要,这个可以让你避开众多无用出错信息的干扰
3:2 表示stderr标准错误
4:&am 表示等同于的意思,2> am 1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以"/dev/null"等同于 "1/dev/null"
因此,/dev/null 2> am 1也可以写成“1 /dev/null 2 &am 1”
那么本文标题的语句执行过程为:
1/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2> am 1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
说清楚了吗,大家理解下吧!
顺便对比述说下这么用的好处! 最常用的方式有:
command file 2file 与command file 2> am 1
它们 有什么不同的地方吗? 首先command file 2file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command file 2file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时竞争抢占file 的管道。 而command file 2> am 1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。 从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command file 2> am 1 这样的写法。
 1、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9; 2.、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor有关;
 3、 用 来改变读进的数据信道(stdin),使之从指定的档案读进;
 4、 用 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
 5、 0 是 的默认值,因此 与 0是一样的;同理, 与 1 是一样的;
 6、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
 7、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdi  8、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
 cmd file 2> am 1 把 stdout 和 stderr 一起重定向到 file 文件中 2> am 1详细说明一下 :2> am 1 也就是 FD2=FD1 ,这里并不是说FD2 的值 等于FD1的值,因为 是改变送出的数据信道,也就是说把 FD2 的 “数据输出通道” 改为 FD1 的 “数据输出通道”
以上内容引用自: http://blog.sina.com.cn/s/blog_5edf89770100s7ov.html
( Tue, 21 Jun 2011 14:32:23 +0800 )
Description:
Hi,all: QA组的旅游活动方案投票已经结束,拔得头筹的是方案二:千岛湖森林氧吧+八卦村采杨梅一日游~
杯具的是,兰溪最近正在遭受洪灾,考虑到安全问题,我们忍痛取消这个方案。十分抱歉。
考虑到部分同事有比较强烈的采摘杨梅的意愿,我们再征集一下大家的意见。
有两个方案:
方案一: 摘杨梅 摘杨梅+其他活动 绍兴柯岩+余姚摘杨梅 杭州乐园+杭州生态园(在萧山所前)+海底捞 以上方案,我们会综合考虑当前的天气等情况来决定举行其中之一。 时间:周末或者下周末
方案二: 延期活动 延期活动,举行一个比较远的旅行活动。 时间:待定
有其他的意见可以直接发表评论,让我们知道你的想法,为大家安排更满意的旅游方案。。
截止日期:2011.6.21
为大家带来不便,敬请谅解!O(∩_∩)O~
( Fri, 17 Jun 2011 19:17:50 +0800 )
Description:
HI, all: QA大组旅游活动终于拉开帷幕啦~~~~ 活动日期待定,初步安排在6.25 或7.2 号~~
会根据天气情况调整
废话不多说了~~ 下面提供了四个旅游方案供大家选择~~~~
来吧~~ 投出你最喜欢的旅游方案~~ 和大家一起出去嗨皮吧~~!!!
方案一:
北斗湾皮筏漂流 景点简介
北斗湾漂流项目总投资1500万,全程2.5公里左右,是目前浙东漂流路程最长、风光 最美、漂流路线最刺激的山野漂流之一。北斗湾上流黄纸厂水库,以其落差大,有“飞流直下三千尺,疑是银河落九天”的气势。在蜿蜒曲折的激流中,游客或搏浪 闯滩,或戏水嬉闹,可纵情放怀,回归自然。整个河流沿岸,山势起伏、雄伟壮观,植被及地貌类型丰富,游客在漂流过程中还可以领略,山野风光,一幅世外桃园 的优美画面。
景点简介
余姚杨梅
余姚杨梅,颗大、色艳、汁多、味重,自古名噪海内外,其种植历史至少已有两千年,而且据境内河姆渡遗址的考古发现,七千年前就有野杨梅存在。由此赢得“余姚杨梅冠天下”的美丽盛誉。1995年,余姚被中央农业部命名为“中国杨梅之乡”。2004年被评为“杨梅原产地”。
方案二:
森林氧吧
森林氧吧拥有千岛湖最好的森林植被(国家亚热带原始次森林保护区)、最美的自然风光 (森林、瀑布、彩岩)和最佳的生态环境(负离子含量非常高)。景区周边群山叠翠,湖湾优美,自然生态环境一流。秀美曲折的溪涧、跌宕多姿的瀑布、色彩斑斓 的水潭,共同组成了地形复杂多样、景致变化万千的森林游憩景观,被誉为千岛湖的世外桃源。
诸葛八卦村
诸葛八卦村,因为和三国传奇人物诸葛亮相关联,借托其独特的人文历史背景,而吸引了众 多的海内外游客驻足。诸葛八卦村位于浙江省兰溪市境内,市区偏西17.5公里,330国道从村的东侧通过,通往龙游、衢州的省道从北侧通过。诸葛八卦村整 个村落以钟池为核心,八条小巷向外辐射,形成内八卦,更为神奇的是村外八座小山环抱整个村落,形成天然的外八卦,村内现保存完好的明清古建筑有200多 座。村落景观多样而优美,即有鳞次栉比的古建筑群,又有环水塘而建的古商业中心,全村形成了一个变化丰富而统一的整体。
杨梅采摘
采摘:游客上山摘杨梅时应注意安全,不要爬得太高,并穿深色或旧衣服,因为杨梅的果汁容易染色,比较稀奇的是,这一颜色在杨梅落市后会自动褪去。而杨梅多长在山上,又逢夏天,上山前宜少带零食多带水,同时做好防晒准备。
功能:美味可口的杨梅有消暑生津、健脾、解渴止咳、增进食欲等效果,经过白酒浸泡过的杨梅,除了止泻还可防止中暑。
食后:特别需要注意的是,杨梅虽较甜,但多吃后有些人牙齿会发生酸痛,一般情况下不用治疗,吃完杨梅后嚼嚼茶叶,可以减轻牙齿的酸痛感。
方案三:仙山谷漂流+杨梅采摘休闲一日游
景点简介:
仙山谷激浪漂流,位于杭州市余杭区鸬鸟镇,距离杭州仅
公里。
境内谷壑幽深,绿树葱茏,峰峦旖旎,云雾缠绵,碧水清澈,滩多浪急。
由仙佰坑水库乘筏,奔流而下,一路浪遏飞舟,中流击水,在上下起伏的漂流中体验生命的动感,在一泻百里的河溪中享受速度的乐趣;沿溪还可领略两岸风光在身旁飞掠而过,不尽浪花在眼前飞珠溅玉。
仙山谷激浪漂流,一次次的俯冲而下,让您始终与浪共舞
尽情体验
艇在水上漂,人在画中游
之趣。
http://www.xsgpl.com/productshow.a ?id=161
到杨梅采摘基地
进行杨梅采摘活动,在园中,大家可以随意地吃杨梅,要带回家的杨梅按市场价格计算。 方案四: 绍兴柯岩+余姚杨梅采摘一日游~
绍兴柯岩
  柯岩风景区依托千年越文化,彰显绍兴独具特色的石文化、水文化、桥文化、酒文化、戏曲文化、名士文化、民俗文化等人文资源,乃绍兴久负盛名的传统旅游胜地。
柯岩景区:柯岩以云骨最为奇绝,号称天下第一石,是隋唐以来采石而成的一大奇观,形态各异的石佛、石宕,“年龄”可追溯到三国时期。
景点简介
余姚杨梅
余姚杨梅,颗大、色艳、汁多、味重,自古名噪海内外,其种植历史至少已有两千年,而且据境内河姆渡遗址的考古发现,七千年前就有野杨梅存在。由此赢得“余姚杨梅冠天下”的美丽盛誉。1995年,余姚被中央农业部命名为“中国杨梅之乡”。2004年被评为“杨梅原产地”。
( Thu, 9 Jun 2011 21:53:23 +0800 )
Description:
***好visualVM的插件visual GC后,远程监控应用,但提示“Not su orted for this JVM”,深感烦恼。
查了一下发现,该插件有两点要求,必须满足其中之一:
1. 应用运行在本地。
2. 或远程系统启动了jstatd agent
Hi Jiri. We have VisualVM ru ing fine, except that the VisualGC plugin doe t work. We are seeing "Not su orted for this JVM" in the page.
Here is some info about the redhat server:
JVM: Java HotSpot(TM) 64-Bit Server VM (11.3-b02, mixed mode)
Java Home: /var/apache/solr-property-partition1-slave/Java/jre1.6.0_13
Does VisualGC not work with 64-bit hot ot?
Posted by
on September 13, 2010 at 08:48 PM CEST
Visual GC uses the jvmstat technology to gather data from the monitored a lication. This mea that the monitored a lication must either run locally or there must be a jstatd agent up and ru ing on the remote system. For remote a licatio added using the JMX co ection you will only see the "Not su orted for this JVM" me age - there's no jvmstat available.
Posted by
on September 14, 2010 at 10:31 AM CEST
( Fri, 3 Jun 2011 14:54:12 +0800 )
Description:
转自:http://www.ixdba.net/article/5c/2177.html
一.inode size 定义
inode table sample
inode table是data area的索引表。
Inode分为内存中的inode和文件系统中的inode,我们这里说的是文件系统中的inode。
linux FS 可以简单分成 inode table与data area两部份。inode table上有许多的inode, 每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。
inode两个功能:记录档案属性和指针
inode table中红色区域即inode size,是128Byte,在liunx系统上通过命令我们可以看到,系统就是这么定义的。
Inode size是指分配给一个inode来记录文档属性的磁盘块的大小。
dumpe2fs -h /dev/hda6 | grep node
Inode size:128
data ares中紫色的区域block size,就是我们一般概念上的磁盘块。这块区域是我们用来存放数据的地方。
还有一个逻辑上的概念:FS中每分配2048 byte给data area, 就分配一个inode。但一个inode就并不一定就用掉2048 byte, 也不是说files allocation的最小单位是2048 byte, 它仅仅是代表filesystem中inode table/data area分配空间的比例是128/2048,也就是1/16。
mkfs.ext3 -i 2048
这条命令中的-i参数就是我们所说的逻辑概念,它的大小决定inode count的大小,redhat5默认-i最小为可设置为1024.
网上很多介绍关于inode的文章,把inode size的定义搞错了,他们把-i参数这个值或block size解读为inode size 所以很多文章令人费解。
inode参数是可以通过
mkfs.ext3
命令改变的:
mkfs.ext3 -i 2048 -b 8192 -f 1024 /dev/sdb2
-i 2048
更改inode为每2KB创建一个
-b 8192
设置block size的大小为8kB
-f 1024
设置fragments的大小为1KB
mkfs.ext3 –N 2939495 /dev/sdb2
–N 2939495
更改inode count。
二.更改一个分区inode参数的完整操作过程:
卸载硬盘分区:
[root@localhost ~]# umount /dev/hda7
调整inode参数
[root@localhost ~]# mkfs.ext3 -i 1024 -b 8192 /dev/hda7
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2048256 inodes, 512064 blocks
25603 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=525250560
63 block grou 8240 blocks per group, 8240 fragments per group
32512 inodes per group
Superblock backu stored on blocks: 8240, 24720, 41200, 57680, 74160, 206000, 222480, 403760
Writing inode tables: done Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
3.修改/etc/fstab
修改前
[root@localhost ~]# vi /etc/fstab
LABEL=/ / ext3 default 1 1
LABEL=/boot /boot ext3 default 1 2
devpt /dev/pt devpt gid=5,mode=620 0 0
tmpf /dev/shm tmpf default 0 0
LABEL=/opt /opt ext3 default 1 2
proc /proc roc default 0 0
sysf /sy sysf default 0 0
LABEL=/usr /usr ext3 default 1 2
LABEL=/var /var ext3 default 1 2
LABEL=SWAP-hda8 wa wa default 0 0
修改后:
[root@localhost ~]# vi /etc/fsta LABEL=/ / ext3 default 1 1
LABEL=/boot /boot ext3 default 1 2
devpt /dev/pt devpt gid=5,mode=620 0 0
tmpf /dev/shm tmpf default 0 0
/dev/hda7 /opt ext3 default 1 2
proc /proc proc default 0 0
sysf /sy ysf default 0 0
LABEL=/usr /usr ext3 default 1 2
LABEL=/var /var ext3 default 1 2
LABEL=SWAP-hda8 swa swa default 0 0
4.挂载分区
mount -a
5.完成后,参数-i 最小值是1024,这个值的大小决定inode count的大小,他们之间的对应关系是:
i=2048 Inode count:1025024
i=1024 Inode count:2048256
inode size的值在这是没有变化的,这也可以证明我上面定义的inode size。
让我们更加清晰的这几个定义之间的关系。
Inode size
Block size
Inode conut
[root@localhost ~]# dumpe2fs -h /dev/hda7
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name: lt one
Last mounted on: < ot available
Filesystem UUID: 440696ad-80e7-4810-8648-a9efda177ea9
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal resize_inode dir_index filetype needs_recovery arse_super
Default mount optio : (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2048256
Block count: 1024128
Reserved block count: 51206
Free blocks: 873767
Free inodes: 2048245
First block: 0
Block size: 2048
Fragment size: 2048
Reserved GDT blocks: 512
Blocks per group: 8176
Fragments per group: 8176
Inodes per group: 16256
Inode blocks per group: 1016
Filesystem created: Fri Jul 11 18:10:33 2008
Last mount time: Fri Jul 11 18:11:02 2008
Last write time: Fri Jul 11 18:11:02 2008
Mount count: 1
Maximum mount count: 34
Last checked: Fri Jul 11 18:10:33 2008
Check interval: 15552000 (6 months)
Next check after: Wed Ja 7 18:10:33 2009
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: tea
Directory Hash Seed: ad1b7c40-6978-49e9-82f6-2331c5cac122
Journal backup: inode blocks
Journal size: 32M
由于时间关系:关于
mkfs.ext3 -i 2048 -b 8192 -f 1024 /dev/sdb2
中这个-i参数的定义,我是根据对应关系推断,给了它只是个逻辑概念的定义。
欢迎大虾们有更有力的论据来解释一下,或推翻我的观点。
三.读取一个树状目录下的文件/etc/crontab 的流程
1.操作系统根据根目录( / )的相关资料可取得 /etc 这个目录所在的 inode ,并前往读取 /etc 这个目录的所有相关属性;
2.根据 /etc 的 inode 的资料,可以取得 /etc 这个目录底下所有文件的关连数据是放置在哪一个 Block 当中,并前往该 block 读取文件的关连性容;
3.由上个步骤的 Block 当中,可以知道 crontab 这个文件的 inode 所在地,并前往该 inode ;
4.由上个步骤的 inode 当中,可以取得 crontab 这个文件的所有属性,并且可前往由 inode 所指向的 Block 区域,顺利的取得 crontab 的文件内容
四.硬链接
Hard Link 只是在某个目录下新增一个该档案的关连数据而已!
1.举个例子来说,我的 /home/vbird/crontab 为一个 hard link 的档案,他连结到 /etc/crontab 这个档案,也就是说,其实 /home/vbird/crontab 与 /etc/crontab 是同一个档案,只是有两个目录( /etc 与 /home/vbird )记录了 crontab 这个档案的关连数据罢了!也就是说,我由 /etc 的 Block 所记录的关连数据可知道 crontab 的 inode 放置在 A 处,而由 /home/vbird 这个目录下的关连数据,contab 同样也指到 A 处的 inode !所以, crontab 这个档案的 inode 与 block 都没有改变,有的只是有两个目录记录了关连数据.
2.使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变!由上面的说明来看,我们可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据,所以当然不会用掉 inode 与磁盘空间。
3.当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。如果我们删除互为硬链接关系的某个文件时,其它的文件并不受影响.
4.由于 hard link 是在同一个 partition 上面进行数据关连的建立,所以 hard link 是有限制的:
a. 不能跨 Filesystem.
b. 不能 link 目录。
五.软链接
1.软链接也叫符号链接,他和硬链接有所不同,软链接文件只是其源文件的一个标记。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,
但我们却不能查看软链接文件的内容了.
2.Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode 与 block
3.所以可用使用软链接解决某个分区inode conut不足的问题(软链接到另一个inode count足够多的分区)。
( Fri, 27 May 2011 16:16:56 +0800 )
Description:
1. 一个城市里有三个人,甲有5套房,不上班,靠收房租生活;乙有一套房,上班赚工资;丙没有房,菜场卖菜。忽然有天要收房产税了,丙说:“太好了,我没房,收那帮炒房人得税,我全力支持,房价大跌了,我就可以买房了。”;乙说:“没关系,我只有一套,收那帮炒房人得税,我支持,房价大跌了,我可以再买一套。”;甲说:“哦,房产税收多少?1%对吧,下个月房租涨5%。”房租上涨了,丙很郁闷,想换个房子,发现大家房租都涨了,只好忍。不过也不能吃亏,明天菜价也涨5%,恩,就这么干。乙和甲去买菜,发现菜价涨了,很郁闷,想换个菜场,发现菜价都涨了,只好少吃点了。于是乎,生活水平就这样下降了,cpi就这样升高了。 2. 发改委成立至今只做过两件事:1)涨价,2)替涨价辩护。 3. 目前中国有效的***手段有:1)夫妻反目;2)家中被盗;3)意外事故;4)情人举报;5)网民诅咒。 4. 国外奶粉热销中国的原因:1)没有三聚氰胺;2)如果有可以索赔巨款;3)如果索赔不成不会进监狱。 5. 上海对北京说:“盛会过后烧栋楼也算是我们的老传统了……”北京点点头,然后和上海一起默默地看着广州…… 6. 感冒了,怕去医院太破费,于是对老婆说:“熬点姜汤喝吧。”老婆说:“姜太贵,咱们还是去医院吧……” 7. 问英语老师“山寨”怎么说,老师一下愣住了,过了会儿,一字一顿地说道:made i China… 8. 奶奶说如果菜价再这样涨下去,房子就要跟白菜一个价喽! 9. 1955年中国的人均收入是韩国的3.2倍,日本的1.1倍。但经过50多年\"翻天覆地\"的增长,2008年中国的人均收入是日本的3%,韩国7%,但韩国、日本从来没宣布自己经济怎么翻番,只有中国是天天说自己翻了很多翻。 10. 中国人固有一死,或死于地沟油,或死于石灰面粉,或死于结石奶粉,或死于毒疫苗,或死于危房,或死于拆迁,或死于日记,或死于酒色,或死于宝马车轮下……中国人口号:一天一杯牛奶,震惊一个民族!死并不可怕,可怕的是你根本不知道自己是怎么死的! 11. 中国不一定是和邻国土地争端最多的国家,但肯定是和本国公民土地争端最多的国家。 12. 看到一寝室阳台挂着,“为灾区祈福,愿天佑中华”,我觉着这标语挂四年都没问题。 13. 新西兰大地震无人死亡,开不成表彰大会了,没那么多英雄事迹了,拍不成电影了,捐不了款了,不能降半旗了,不能全国不打网游了,明星也不能诈捐了,也没法创造生命奇迹了!最主要是新西兰错过多难兴邦的大好形势了! 14. 在谈所谓大国崛起之时,请扪心自问:你的收入崛起没有、你的住房面积崛起没有、你的护照免签国家数量崛起没有、你的食品安全崛起没有、你的医保社保崛起没有,如果都没有,那么大国再崛起关你P事。 15. 国家发改委自4月14日零时起将汽柴油价格每吨均提高320元.各地民众获得消息后纷纷表示,由于涨价油品并不包括地沟油,所以对实际生活影响并不大。 16. 55岁的周润发宣布死后将捐出99%的财产,什么都不想带走。作家顾晓军评论道:千万不要捐到大陆来,不要害了无辜的官员。 17. 近日偶然看见某官方实验室的采购清单,赫然看见上面有七万元的松下42寸的LED屏电视若干。更搞笑的是一个研究计算机的实验室居然还采购了顶配的索尼单反相机和丰田的越野车。看来这种实验室真是建设它一个幸福全所人。 18. 日本人冈本真夜1997年的一首歌无耻地抄袭了我们2010年世博会的会歌,太可恶了!! 19. 什么是奇迹?我建了一座豆腐渣大楼,然后雇了150个短工装修,很多人说这房子容易塌,我充耳不闻。结果「哗啦」的塌了,把他们埋在废墟里整整八天八夜,我找人挖开塌坍时,有一百多人活着。这是个奇迹,更奇迹的是我他妈不但无罪,还成了救人的大英雄! 20. 以前经常看到报道比如印度/巴西之类贫民窟着火死掉几十几百人的新闻,现在发现,只不过我们的贫民窟卖到了4万1平米。 21. 电影学院又招生了,其中有不少姿色美女,问她们怎么看待潜规则,美女回答 很淡定:“只要有规则,就好办。” 22. 人生境界:拿沙特的工资住英国房子用瑞典手机带瑞士手表娶韩国女人包日本二奶做泰国***开德国轿车坐美国飞机喝法国红酒,吃澳洲海鲜,抽古巴雪茄,穿意大利皮鞋,玩西班牙女郎,看奥地利歌剧,买俄罗斯别墅,雇菲律宾女佣,配以色列保镖,洗土耳其***,在中国当***”;不过只要做最后一点,前面皆可实现。 23. 有人说,最具中国特色的亚运会点火方式是……一个拆迁户拿着汽油瓶子浇身上,然后点燃自己,跳进火炬,仪式结束后,来群推土机,直接把圣火台拆了。 24. 2007年,京沪高铁投资预算增至2200亿元。 2008年,中央推出40000亿投资计划。 2008年,中国免除46个国家400多亿债务。 2009年,中国免除32个国家150笔债务。 2009年,中国对非援助累计760亿人民币。 2009年,中国累计对朝援助达8000亿元 2009年,累计购买美国国债达到8100亿美元,累计购买外债达到到20000亿美元! 2009年,中国公车消费每年达到9000亿人民币。 2009年,中石油称:“加薪10亿是小钱。” 2009年,上海更换5000块路牌花费2亿, 平均每块路牌4万元! 2009年,中国信贷总额近100000亿人民币 2008年,北京奥运会共耗资3000亿人民币。 2010年,上海世博会共耗资4000亿人民币 2010年,省10分钟,沪杭磁悬浮耗资350亿。 2010年,中国承诺对朝鲜700亿投资计划。 2010年,湖北省曝光120000亿投资计划。 中国援助巴基斯坦,金额一直是个迷。。。。。 2010年,西南五省大旱,6000万人受灾,损失200多亿, 中央拨付旱灾救灾资金1.6亿元。 2010年,人大指出: 中国实现全民免费医疗每年需花费1600亿元, 目前中国不具备这个经济实力! 2011....? 2012....? 25. 亚运会的中国代表团1500位猛男悍女,就是囊括了所有冠军,也只能代表中国体制,而非中国人的体质。代表中华民族的体质的,是3千万三聚氰胺宝宝的身体。 26. "今年到底暖冬还是冷冬?专家认为,具体要等冬季结束才能评价。” 27. 某市近来每到夜里,许多领导的办公室火光熊熊,有人打119报警,消防队无动于衷,拒不出警。民众投诉后得到的答复是:领导们在烧日记。 28. 据说大地震前有三个明显征兆:1.井水异常;2.牲畜反应异常;3.专家出来辟谣。但是细心的人指出,第二条和第三条重复了。 29. 一个54岁下岗工人说了一句震惊中外的话:“对待知识分子的态度标志着一个民族的文明程度,而对待工人农民的态度则可考验这个民族的良心。” 30. 不敢说真话是个人的耻辱,不能说真话是时代的耻辱! 31. 2010年4月13日 零时 国家发改委决定上调油价,同天早上7时49分,青海玉树县7.1级地震。 2010年10月25日发改委宣布,10月26日零时起上调油价。同一天,印尼苏门答腊岛7.2级地震,并引发巨大海啸。 2010年12月22日发改委再次上调油价,日本发生7.4级地震。2011年2月20日发改委再次上调油价,新西兰发生6.5级地震。2011年4月7日发改委再次上调油价,日本再次发生7.4级地震。。中国承诺在现代战争中,不轻易动用发改委。
( Mon, 23 May 2011 14:27:41 +0800 )
Description:
1、java.util.Date类型转换成long类型
java.util.Date dt = new Date();
System.out.println(dt.toString()) //java.util.Date的含义
long lSysTime1 = dt.getTime() / 1000 //得到秒数,Date类型的getTime()返回毫秒数
2、由long类型转换成Date类型
SimpleDateFormat sdf= new SimpleDateFormat("MM/dd/yyyy HH:mm: ");
//前面的lSysTime是秒数,先乘1000得到毫秒数,再转为java.util.Date类型
java.util.Date dt = new Date(lSysTime1 * 1000) String sDateTime =
sdf.format(dt); //得到精确到秒的表示:08/31/2006 21:08:00
System.out.println(sDateTime); 3、"08/31/2006 21:08:00"格式的String转换java.util.Date类型
String sDt = "08/31/2006 21:08:00";
SimpleDateFormat sdf= new SimpleDateFormat("MM/dd/yyyy HH:mm: ");
Date dt2 = sdf.parse(sDt);
//继续转换得到秒数的long型
long lTime = dt2.getTime() / 1000; //注意HH与hh含认不同,HH表示以24小时***,hh表示以12小时***
常用的格式的含义,摘自Jdk,注意大小写的含义通常是不同的:
字母 含义 示例
y Year 1996;96 哪一年
M Month in year J uly;Jul;07 一年中的哪一月
m Minute in hour 30 一个小时中的第几分钟
w Week in year 27 一年中的第几个星期
W Week in month 2 一个月中的第几个星期
D Day in year 189 一年中的第几天
d Day in month 10 一个月中的第几天
H Hour in day (0-23) 0 一天中的第几个小时(24小时制)
h Hour in am/pm (1-12) 12 一天中上午、下午的第几个小时(12小时制)
S Millisecond 978 毫秒数 Second in minute 55 一分钟的第几秒 4、系统当前时间
long lSysTime2 = System.currentTimeMillis() //得到毫秒表示的系统当前时间
( Tue, 12 Apr 2011 14:04:59 +0800 )
Description:
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。
信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。
一、信号的基本概念
本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。
1、基本概念
软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而 给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。
收 到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处 理。第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信 号的缺省操作是使得进程终止。进程通过系统调用signal来指定进程对某个信号的处理行为。
在进程表的表项中有一个软中断信号域,该域中每一位对应一个信号,当有信号发送给进程时,对应位置位。由此可以看出,进程对不同的信号可以同时保留,但对于同一个信号,进程并不知道在处理之前来过多少个。
2、信号的类型
发出信号的原因很多,这里按发出信号的原因简单分类,以了解各种信号:
(1) 与进程终止相关的信号。当进程退出,或者子进程终止时,发出这类信号。
(2) 与进程例外事件相关的信号。如进程越界,或企图写一个只读的内存区域(如程序正文区),或执行一个特权指令及其他各种硬件错误。
(3) 与在系统调用期间遇到不可恢复条件相关的信号。如执行系统调用exec时,原有资源已经释放,而目前系统资源又已经耗尽。
(4) 与执行系统调用时遇到非预测错误条件相关的信号。如执行一个并不存在的系统调用。
(5) 在用户态下的进程发出的信号。如进程调用系统调用kill向其他进程发送信号。
(6) 与终端交互相关的信号。如用户关闭一个终端,或按下break键等情况。
(7) 跟踪进程执行的信号。
Linux支持的信号列表如下。很多信号是与机器的体系结构相关的,首先列出的是POSIX.1中列出的信号:
信号 值 处理动作 发出信号的原因
----------------------------------------------------------------------
SIGHUP 1 A 终端挂起或者控制进程终止
SIGINT 2 A 键盘中断(如break键被按下)
SIGQUIT 3 C 键盘的退出键被按下
SIGILL 4 C 非法指令
SIGABRT 6 C 由abort(3)发出的退出指令
SIGFPE 8 C 浮点异常
SIGKILL 9 AEF Kill信号
SIGSEGV 11 C 无效的内存引用
SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道
SIGALRM 14 A 由alarm(2)发出的信号
SIGTERM 15 A 终止信号
SIGUSR1 30,10,16 A 用户自定义信号1
SIGUSR2 31,12,17 A 用户自定义信号2
SIGCHLD 20,17,18 B 子进程结束信号
SIGCONT 19,18,25 进程继续(曾被停止的进程)
SIGSTOP 17,19,23 DEF 终止进程
SIGTSTP 18,20,24 D 控制终端(tty)上按下停止键
SIGTTIN 21,21,26 D 后台进程企图从控制终端读
SIGTTOU 22,22,27 D 后台进程企图从控制终端写
下面的信号没在POSIX.1中列出,而在SUSv2列出
信号 值 处理动作 发出信号的原因
--------------------------------------------------------------------
SIGBUS 10,7,10 C 总线错误(错误的内存访问)
SIGPOLL A Sys V定义的Pollable事件,与SIGIO同义
SIGPROF 27,27,29 A Profiling定时器到
SIGSYS 12,-,12 C 无效的系统调用 (SVID)
SIGTRAP 5 C 跟踪/断点捕获
SIGURG 16,23,21 B Socket出现紧急条件(4.2 BSD)
SIGVTALRM 26,26,28 A 实际时间报警时钟信号(4.2 BSD)
SIGXCPU 24,24,30 C 超出设定的CPU时间限制(4.2 BSD)
SIGXFSZ 25,25,31 C 超出设定的文件大小限制(4.2 BSD)
(对于SIGSYS,SIGXCPU,SIGXFSZ,以及某些机器体系结构下的SIGBUS,Linux缺省的动作是A (terminate),SUSv2 是C (terminate and dump core))。
下面是其它的一些信号
信号 值 处理动作 发出信号的原因
----------------------------------------------------------------------
SIGIOT 6 C IO捕获指令,与SIGABRT同义
SIGEMT 7,-,7
SIGSTKFLT -,16,- A 协处理器堆栈错误
SIGIO 23,29,22 A 某I/O操作现在可以进行了(4.2 BSD)
SIGCLD -,-,18 A 与SIGCHLD同义
SIGPWR 29,30,19 A 电源故障(System V)
SIGINFO 29,-,- A 与SIGPWR同义
SIGLOST -,-,- A 文件锁丢失
SIGWINCH 28,28,20 B 窗口大小改变(4.3 BSD, Sun)
SIGUNUSED -,31,- A 未使用的信号(will be SIGSYS)
(在这里,- 表示信号没有实现;有三个值给出的含义为,第一个值通常在Alpha和Sparc上有效,中间的值对应i386和 c以及sh,最后一个值对应 mi 。信号29在Alpha上为SIGINFO / SIGPWR ,在Sparc上为SIGLOST。)
处理动作一项中的字母含义如下
A 缺省的动作是终止进程
B 缺省的动作是忽略此信号
C 缺省的动作是终止进程并进行内核映像转储(dump core)
D 缺省的动作是停止进程
E 信号不能被捕获
F 信号不能被忽略
上 面介绍的信号是常见系统所支持的。以表格的形式介绍了各种信号的名称、作用及其在默认情况下的处理动作。各种默认处理动作的含义是:终止程序是指进程退 出;忽略该信号是将该信号丢弃,不做处理;停止程序是指程序挂起,进入停止状况以后还能重新进行下去,一般是在调试的过程中(例如ptrace系统调 用);内核映像转储是指将进程数据在内存的映像和进程在内核结构中存储的部分内容以一定格式转储到文件系统,并且进程退出执行,这样做的好处是为程序员提 供了方便,使得他们可以得到进程当时执行时的数据值,允许他们确定转储的原因,并且可以调试他们的程序。
注意 信号SIGKILL和SIGSTOP既不能被捕捉,也不能被忽略。信号SIGIOT与SIGABRT是一个信号。可以看出,同一个信号在不同的系统中值可能不一样,所以建议最好使用为信号定义的名字,而不要直接使用信号的值。
二、信 号 机 制
上 一节中介绍了信号的基本概念,在这一节中,我们将介绍内核如何实现信号机制。即内核如何向一个进程发送信号、进程如何接收一个信号、进程怎样控制自己对信 号的反应、内核在什么时机处理和怎样处理进程收到的信号。还要介绍一下setjmp和longjmp在信号中起到的作用。
1、内核对信号的基本处理方法
内 核给一个进程发送软中断信号的方法,是在进程所在的进程表项的信号域设置对应于该信号的位。这里要补充的是,如果信号发送给一个正在睡眠的进程,那么要看 该进程进入睡眠的优先级,如果进程睡眠在可被中断的优先级上,则唤醒进程;否则仅设置进程表中信号域相应的位,而不唤醒进程。这一点比较重要,因为进程检 查是否收到信号的时机是:一个进程在即将从内核态返回到用户态时;或者,在一个进程要进入或离开一个适当的低调度优先级睡眠状态时。
内核处理一个进程收到的信号的时机是在一个进程从内核态返回用户态时。所以,当一个进程在内核态下运行时,软中断信号并不立即起作用,要等到将返回用户态时才处理。进程只有处理完信号才会返回用户态,进程在用户态下不会有未处理完的信号。
内 核处理一个进程收到的软中断信号是在该进程的上下文中,因此,进程必须处于运行状态。前面介绍概念的时候讲过,处理信号有三种类型:进程接收到信号后退 出;进程忽略该信号;进程收到信号后执行用户设定用系统调用signal的函数。当进程接收到一个它忽略的信号时,进程丢弃该信号,就象没有收到该信号似 的继续运行。如果进程收到一个要捕捉的信号,那么进程从内核态返回用户态时执行用户定义的函数。而且执行用户定义的函数的方法很巧妙,内核是在用户栈上创 建一个新的层,该层中将返回地址的值设置成用户定义的处理函数的地址,这样进程从内核返回弹出栈顶时就返回到用户定义的函数处,从函数返回再弹出栈顶时, 才返回原先进入内核的地方。这样做的原因是用户定义的处理函数不能且不允许在内核态下执行(如果用户定义的函数在内核态下运行的话,用户就可以获得任何权 限)。
在信号的处理方法中有几点特别要引起注意。第一,在一些系统中,当一个进程处理完中断信号返回用户态之前,内核清除用户区中设 定的对该信号的处理例程的地址,即下一次进程对该信号的处理方法又改为默认值,除非在下一次信号到来之前再次使用signal系统调用。这可能会使得进程 在调用signal之前又得到该信号而导致退出。在BSD中,内核不再清除该地址。但不清除该地址可能使得进程因为过多过快的得到某个信号而导致堆栈溢 出。为了避免出现上述情况。在BSD系统中,内核模拟了对硬件中断的处理方法,即在处理某个中断时,阻止接收新的该类中断。
第二个要 引起注意的是,如果要捕捉的信号发生于进程正在一个系统调用中时,并且该进程睡眠在可中断的优先级上,这时该信号引起进程作一次longjmp,跳出睡眠 状态,返回用户态并执行信号处理例程。当从信号处理例程返回时,进程就象从系统调用返回一样,但返回了一个错误代码,指出该次系统调用曾经被中断。这要注 意的是,BSD系统中内核可以自动地重新开始系统调用。
第三个要注意的地方:若进程睡眠在可中断的优先级上,则当它收到一个要忽略的信号时,该进程被唤醒,但不做longjmp,一般是继续睡眠。但用户感觉不到进程曾经被唤醒,而是象没有发生过该信号一样。
第 四个要注意的地方:内核对子进程终止(SIGCLD)信号的处理方法与其他信号有所区别。当进程检查出收到了一个子进程终止的信号时,缺省情况下,该进程 就象没有收到该信号似的,如果父进程执行了系统调用wait,进程将从系统调用wait中醒来并返回wait调用,执行一系列wait调用的后续操作(找 出僵死的子进程,释放子进程的进程表项),然后从wait中返回。SIGCLD信号的作用是唤醒一个睡眠在可被中断优先级上的进程。如果该进程捕捉了这个 信号,就象普通信号处理一样转到处理例程。如果进程忽略该信号,那么系统调用wait的动作就有所不同,因为SIGCLD的作用仅仅是唤醒一个睡眠在可被 中断优先级上的进程,那么执行wait调用的父进程被唤醒继续执行wait调用的后续操作,然后等待其他的子进程。
如果一个进程调用signal系统调用,并设置了SIGCLD的处理方法,并且该进程有子进程处于僵死状态,则内核将向该进程发一个SIGCLD信号。
2、setjmp和longjmp的作用
前面在介绍信号处理机制时,多次提到了setjmp和longjmp,但没有仔细说明它们的作用和实现方法。这里就此作一个简单的介绍。
在 介绍信号的时候,我们看到多个地方要求进程在检查收到信号后,从原来的系统调用中直接返回,而不是等到该调用完成。这种进程突然改变其上下文的情况,就是 使用setjmp和longjmp的结果。setjmp将保存的上下文存入用户区,并继续在旧的上下文中执行。这就是说,进程执行一个系统调用,当因为资 源或其他原因要去睡眠时,内核为进程作了一次setjmp,如果在睡眠中被信号唤醒,进程不能再进入睡眠时,内核为进程调用longjmp,该操作是内核 为进程将原先setjmp调用保存在进程用户区的上下文恢复成现在的上下文,这样就使得进程可以恢复等待资源前的状态,而且内核为setjmp返回1,使 得进程知道该次系统调用失败。这就是它们的作用。
三、有关信号的系统调用
前面两节已经介绍了有关信号的大部分知 识。这一节我们来了解一下这些系统调用。其中,系统调用signal是进程用来设定某个信号的处理方法,系统调用kill是用来发送信号给指定进程的。这 两个调用可以形成信号的基本操作。后两个调用pause和alarm是通过信号实现的进程暂停和定时器,调用alarm是通过信号通知进程定时器到时。所 以在这里,我们还要介绍这两个调用。
1、signal 系统调用
系统调用signal用来设定某个信号的处理方法。该调用声明的格式如下:
void (*signal(int signum, void (*handler)(int)))(int);
在使用该调用的进程中加入以下头文件:
#include < ignal.h
上述声明格式比较复杂,如果不清楚如何使用,也可以通过下面这种类型定义的格式来使用(POSIX的定义):
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
但这种格式在不同的系统中有不同的类型定义,所以要使用这种格式,最好还是参考一下联机手册。
在调用中,参数signum指出要设置处理方法的信号。第二个参数handler是一个处理函数,或者是
SIG_IGN:忽略参数signum所指的信号。
SIG_DFL:恢复参数signum所指信号的处理方法为默认值。
传递给信号处理例程的整数参数是信号值,这样可以使得一个信号处理例程处理多个信号。系统调用signal返回值是指定信号signum前一次的处理例程或者错误时返回错误代码SIG_ERR。下面来看一个简单的例子:
#include < ignal.h
#include unistd.h
#include < tdio.h
void sigroutine(int du o) { /* 信号处理例程,其中du o将会得到信号的值 */
switch (du o) {
case 1:
printf("Get a signal -- SIGHUP ");
case 2:
printf("Get a signal -- SIGINT ");
case 3:
printf("Get a signal -- SIGQUIT ");
retur }
int main() {
printf("proce id is %d ",getpid());
signal(SIGHUP, sigroutine); //* 下面设置三个信号的处理方法
signal(SIGINT, sigroutine);
signal(SIGQUIT, sigroutine);
for ( ) ;
其中信号SIGINT由按下Ctrl-C发出,信号SIGQUIT由按下Ctrl-发出。该程序执行的结果如下:
localhost:~$ ./sig_test
proce id is 463
Get a signal -SIGINT //按下Ctrl-C得到的结果
Get a signal -SIGQUIT //按下Ctrl-得到的结果
//按下Ctrl-z将进程置于后台
[1]+ Sto ed ./sig_test
localhost:~$ bg
[1]+ ./sig_test &am localhost:~$ kill -HUP 463 //向进程发送SIGHUP信号
localhost:~$ Get a signal – SIGHUP
kill -9 463 //向进程发送SIGKILL信号,终止进程
localhost:~$
2、kill 系统调用
系统调用kill用来向进程发送一个信号。该调用声明的格式如下:
int kill(pid_t pid, int sig);
在使用该调用的进程中加入以下头文件:
#include < ys/types.h
#include < ignal.h
该 系统调用可以用来向任何进程或进程组发送任何信号。如果参数pid是正数,那么该调用将信号sig发送到进程号为pid的进程。如果pid等于0,那么信 号sig将发送给当前进程所属进程组里的所有进程。如果参数pid等于-1,信号sig将发送给除了进程1和自身以外的所有进程。如果参数pid小于- 1,信号sig将发送给属于进程组-pid的所有进程。如果参数sig为0,将不发送信号。该调用执行成功时,返回值为0;错误时,返回-1,并设置相应 的错误代码errno。下面是一些可能返回的错误代码:
EINVAL:指定的信号sig无效。
ESRCH:参数pid指定的进程或进程组不存在。注意,在进程表项中存在的进程,可能是一个还没有被wait收回,但已经终止执行的僵死进程。
EPERM: 进程没有权力将这个信号发送到指定接收信号的进程。因为,一个进程被允许将信号发送到进程pid时,必须拥有root权力,或者是发出调用的进程的UID 或EUID与指定接收的进程的UID或保存用户ID(savedset-user-ID)相同。如果参数pid小于-1,即该信号发送给一个组,则该错误 表示组中有成员进程不能接收该信号。
3、pause系统调用
系统调用pause的作用是等待一个信号。该调用的声明格式如下:
int pause(void);
在使用该调用的进程中加入以下头文件:
#include unistd.h
该调用使得发出调用的进程进入睡眠,直到接收到一个信号为止。该调用总是返回-1,并设置错误代码为EI***(接收到一个信号)。下面是一个简单的范例:
#include unistd.h
#include < tdio.h
#include < ignal.h
void sigroutine(int unused) {
printf("Catch a signal SIGINT ");
int main() {
signal(SIGINT, sigroutine);
pause();
printf("receive a signal ");
在这个例子中,程序开始执行,就象进入了死循环一样,这是因为进程正在等待信号,当我们按下Ctrl-C时,信号被捕捉,并且使得pause退出等待状态。
4、alarm和 setitimer系统调用
系统调用alarm的功能是设置一个定时器,当定时器计时到达时,将发出一个信号给进程。该调用的声明格式如下:
u igned int alarm(u igned int seconds);
在使用该调用的进程中加入以下头文件:
#include unistd.h
系 统调用alarm安排内核为调用进程在指定的seconds秒后发出一个SIGALRM的信号。如果指定的参数seconds为0,则不再发送 SIGALRM信号。后一次设定将取消前一次的设定。该调用返回值为上次定时调用到发送之间剩余的时间,或者因为没有前一次定时调用而返回0。
注意,在使用时,alarm只设定为发送一次信号,如果要多次发送,就要多次使用alarm调用。
对于alarm,这里不再举例。现在的系统中很多程序不再使用alarm调用,而是使用setitimer调用来设置定时器,用getitimer来得到定时器的状态,这两个调用的声明格式如下:
int getitimer(int which, struct itimerval *value);
int setitimer(int which, co t struct itimerval *value, struct itimerval *ovalue);
在使用这两个调用的进程中加入以下头文件:
#include < ys/time.h
该系统调用给进程提供了三个定时器,它们各自有其独有的计时域,当其中任何一个到达,就发送一个相应的信号给进程,并使得计时器重新开始。三个计时器由参数which指定,如下所示:
TIMER_REAL:按实际时间计时,计时到达将给进程发送SIGALRM信号。
ITIMER_VIRTUAL:仅当进程执行时才进行计时。计时到达将发送SIGVTALRM信号给进程。
ITIMER_PROF:当进程执行时和系统为该进程执行动作时都计时。与ITIMER_VIR-TUAL是一对,该定时器经常用来统计进程在用户态和内核态花费的时间。计时到达将发送SIGPROF信号给进程。
定时器中的参数value用来指明定时器的时间,其结构如下:
struct itimerval {
struct timeval it_interval; /* 下一次的取值 */
struct timeval it_value; /* 本次的设定值 */
该结构中timeval结构定义如下:
struct timeval {
long tv_sec; /* 秒 */
long tv_usec; /* 微秒,1秒 = 1000000 微秒*/
在setitimer 调用中,参数ovalue如果不为空,则其中保留的是上次调用设定的值。定时器将it_value递减到0时,产生一个信号,并将it_value的值设 定为it_interval的值,然后重新开始计时,如此往复。当it_value设定为0时,计时器停止,或者当它计时到期,而it_interval 为0时停止。调用成功时,返回0;错误时,返回-1,并设置相应的错误代码errno:
EFAULT:参数value或ovalue是无效的指针。
EINVAL:参数which不是ITIMER_REAL、ITIMER_VIRT或ITIMER_PROF中的一个。
下面是关于setitimer调用的一个简单示范,在该例子中,每隔一秒发出一个SIGALRM,每隔0.5秒发出一个SIGVTALRM信号:
#include < ignal.h
#include unistd.h
#include < tdio.h
#include < ys/time.h
int sec;
void sigroutine(int signo) {
switch (signo) {
case SIGALRM:
printf("Catch a signal -- SIGALRM ");
case SIGVTALRM:
printf("Catch a signal -- SIGVTALRM ");
retur }
int main() {
struct itimerval value,ovalue,value2;
sec = 5;
printf("proce id is %d ",getpid());
signal(SIGALRM, sigroutine);
signal(SIGVTALRM, sigroutine);
value.it_value.tv_sec = 1;
value.it_value.tv_usec = 0;
value.it_interval.tv_sec = 1;
value.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &am value, &am ovalue);
value2.it_value.tv_sec = 0;
value2.it_value.tv_usec = 500000;
value2.it_interval.tv_sec = 0;
value2.it_interval.tv_usec = 500000;
setitimer(ITIMER_VIRTUAL, &am value2, &am ovalue);
for ( ) ;
该例子的屏幕拷贝如下:
localhost:~$ ./timer_test
proce id is 579
Catch a signal – SIGVTALRM
Catch a signal – SIGALRM
Catch a signal – SIGVTALRM
Catch a signal – SIGVTALRM
Catch a signal – SIGALRM
Catch a signal –GVTALRM
本文简单介绍了Linux下的信号,如果希望了解其他调用,请参考联机手册或其他文档。
转自:
一. trap捕捉到信号之后,可以有三种反应方式:
  (1)执行一段程序来处理这一信号
  (2)接受信号的默认操作
  (3)忽视这一信号
  二. trap对上面三种方式提供了三种基本形式:
  第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,将执行双
  引号中的命令串。
  trap 'commands' signal-list
  trap "commands" signal-list
  为了恢复信号的默认操作,使用第二种形式的trap命令:
  trap signal-list
  第三种形式的trap命令允许忽视信号
  trap " " signal-list
注意:
  (1) 对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。
  (2) 在trap中可以定义对信号0的处理(实际上没有这个信号), shell程序在其终止(如
  执行exit语句)时发出该信号。
  (3) 在捕捉到signal-list中指定的信号并执行完相应的命令之后, 如果这些命令没有
  将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将
  很容易导致shell程序无法终止。
  另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,
  将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会
  对commands中的变量和命令进行替换, 否则commands中的变量和命令将用当时具体的值来
( Tue, 15 Mar 2011 15:10:31 +0800 )
Description:
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
top - 01:06:48 u 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 ru ing, 28 sleeping, 0 sto ed, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 hd 14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top 1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
统计信息区:
第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 ru ing 正在运行的进程数
28 sleeping 睡眠的进程数
0 sto ed 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi 硬中断时间百分比
0.0% si 软中断时间百分比
191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffer 用作内核缓存的内存量
192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些
内容已存在于内存中
的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区
父进程
Real user name
进程所有者的用户
进程所有者的用户名
进程所有者的组名
启动进程的终端名。不是从终端启动的进程则显示为
优先级
值。负值表示高优先级,正值表示低优先级
最后使用的
,仅在多
环境下有意义
上次更新到现在的
时间占用百分比
进程使用的
时间总计,单位秒
进程使用的
时间总计,单位
进程使用的
物理内存
百分比
进程使用的虚拟内存总量,单位
VIRT=SWAP+RES
进程使用的虚拟内存中,被换出的大小,单位
进程使用的、未被换出的物理内存大小,单位
RES=CODE+DATA
可执行代码占用的
内存大小,单位
可执行代码以外的部分
数据段
占用的
内存大小,单位
共享内存大小,单位
页面错误次数
最后一次写入到现在,被修改过的页面数。
进程状态。
不可中断的睡眠状态
僵尸进程
COMMAND
命令名
命令行
若该进程在睡眠,则显示睡眠中的系统函数名
任务标志,参考
sched.h
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容
键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的
键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的
键可以将当前的排序倒转。
命令使用
1. 工具(命令)名称
2.工具(命令)作用
显示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间 对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
3.环境设置
在Linux下使用。
4.使用方法
4.1使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
4.2参数说明
指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
通过指定监控进程ID来仅仅监控某个进程的状态。
该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
指定累计模式
使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
4.3其他
  下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
擦除并且重写屏幕。
h或者?
显示帮助画面,给出一些简短的命令总结说明。
终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
忽略闲置和僵死进程。这是一个开关式命令。
退出程序。
重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
切换到累计模式。
改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F
从当前显示中添加或者删除项目。
o或者O
改变显示项目的顺序。
切换显示平均负载和启动时间信息。
切换显示内存信息。
切换显示进程和CPU状态信息。
切换显示命令名称和完整命令行。
根据驻留内存大小进行排序。
根据CPU使用百分比大小进行排序。
根据时间/累计时间进行排序。 W
将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
( Tue, 15 Mar 2011 14:30:51 +0800 )
Description: 为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache.前者针对磁盘块的读写,后者针对文件inode的读写.这些Cache有效缩短了I/O系统调用(比如 read,write,getdents)的时间. 内存活动基本上可以用3个数字来量化:活动虚拟内存总量,交换(swa ing)率和调页(paging)率.其中第一个数字表明内存的总需求量,后两 个数字表示那些内存中有多少比例正处在使用之中.目标是减少内存活动或增加内存量,直到调页率保持在一个可以接受的水平上为止. 活动虚拟内存的总量(VM)=实际内存大小(size of real memory)(物理内存)+使用的交换空间大小(amount of swap ace used) 当程序运行需要的内存大于物理内存时,UNIX系统采用了调页机制,即系统copy一些内存中的页面到磁盘上,腾出来空间供进程使用。
大多数系统可以忍受偶尔的调页,但是频繁的调页会使系统性能急剧下降。
UNIX内存
:UNIX系统通过2种方法进行内存管理,“调页算法”,“交换技术”。
调页算法是将内存中最近不常使用的页面换到磁盘上,把常使用的页面(活动页面)保留在内存中供进程使用。
交换技术是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发生一些交换过程。
当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘I/O的负载。进一步降低了系统对作业的执行速度,即系统I/O资源问题又会影响到内存资源的分配。
Unix的虚拟内存
Unix的虚拟内存是一个十分复杂的子系统,它实现了进程间
与数据共享机制的透明性,并能够分配比系统现有物理内存更多的内存,某些操作系统的虚存甚至能通过提供缓存功能影响到文件系统的性能,各种风格的UNIX的虚存的实现方式区别很大,但都离不开下面的4个概念。
1:实际内存
实际内存是指一个系统中实际存在的物理内存,称为RAM。实际内存是存储临时数据最快最有效的方式,因此必须尽可能地分配给应用程序,现在的RAM的形式有多种:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用纠错机制(ECC)。
2:交换空间
交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。
3:页面调度
页 面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Unix内存被平均划分成大小相等的页面;通常页面大小为4KB 和8KB(在Solaris中可以用pagesize命令查看)。当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一 段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM交给其他需要它的程序使用。
4:交换
页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。
[root@localhost ~]# vmstat -n 3 (每个3秒刷新一次)
-----------memory--------------------swap--
----io---- --system---- ------cpu--------
r swpd free buff cache si o bi bo i c u sy id wa
1 0 144 186164 105252 2386848 0 0 18 166 83 2 48 21 31 0
2 0 144 189620 105252 2386848 0 0 0 177 1039 1210 34 10 56 0
0 0 144 214324 105252 2386848 0 0 0 10 1071 670 32 5 63 0
0 0 144 202212 105252 2386848 0 0 0 189 1035 558 20 3 77 0
2 0 144 158772 105252 2386848 0 0 0 203 1065 2832 70 14 15 0
-swap:切换到交换内存上的内存(默认以KB为单位)
如果SWAP的值不为0,或者还比较大,比如超过100M了,但是SI,SO的值长期为0,这种情况我们可以不用担心,不会影响系统性能。
-free:空闲的物理内存
- buff:作为buffer cache的内存,对块设备的读写进行缓冲
-cache:作为page cache的内存,文件系统的cache
如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
-si:交换内存使用,由磁盘调入内存
-so:交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。
我发现有些朋友看到空闲内存(FREE)很少的或接近于0时,就认为内存不够用了,实际上不能光看这一点,Linux是抢占内存式的OS,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
使用free命令查看内存使用情况
[root@server ~]# free -m total used free hared uffer cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511
其中:
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached
可用的memory=free memory+buffers+cached
( Wed, 9 Mar 2011 17:13:19 +0800 )
Description:
使用putty客户端进行 h scp时,出错,permi ion denied。 需要设置一下客户端,启用Agent。 ( Wed, 9 Mar 2011 11:42:41 +0800 )
Description:
$iostat -x 1
Linux 2.6.33-fukai (fukai-laptop) _i686_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.47 0.50 8.96 48.26 0.00 36.82 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 6.00 273.00 99.00 7.00 2240.00 2240.00 42.26 1.12 10.57 7.96 84.40
sdb 0.00 4.00 0.00 350.00 0.00 2068.00 5.91 0.55 1.58 0.54 18.80
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz:
平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:
平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(
等待资源的进程数
)和wa参数(
IO等待所占用的CPU时间的百分比,高过30%时IO压力高
另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高。也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的。
另外还可以参考
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。 别人一个不错的例子.(I/O 系统 vs. 超市排队)
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连 钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
下面是别人写的这个参数输出的分析
# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cci /c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。
平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + … + 请求总数-1) / 请求总数
应用到上面的例子: 平均等待时间 = 5ms * (1+2+…+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。
每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。
一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 = delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bug,avgqu-sz 值应为 2.23,而不是 22.35。
( Wed, 9 Mar 2011 10:52:33 +0800 )
Description:
sar -n { DEV | EDEV | NFS | NFSD | SOCK | ALL }
sar 提供六种不同的语法选项来显示网络信息。-n选项使用6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL 。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套 接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。
#sar -n DEV 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/29/2009
01:39:40 AM IFACE rxpck/ txpck/ rxbyt/ txbyt/ rxcmp/ txcmp/s rxmcst/s
01:39:42 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:39:42 AM eth1 131.34 104.98 119704.48 36110.45 0.00 0.00 0.00
01:39:42 AM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:39:42 AM IFACE rxpck/ txpck/ rxbyt/ txbyt/ rxcmp/ txcmp/s rxmcst/s
01:39:44 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:39:44 AM eth1 168.00 165.50 114496.50 83938.50 0.00 0.00 0.00
01:39:44 AM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE:LAN接口
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包
#sar -n EDEV 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/29/2009
01:42:18 AM IFACE rxerr/ txerr/ coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
01:42:20 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:42:20 AM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:42:20 AM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE:LAN接口
rxerr/s:每秒钟接收的坏数据包
txerr/s:每秒钟发送的坏数据包
coll/s:每秒冲突数
rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
txcarr/s:发送数据包时,每秒载波错误数
rxfram/s:每秒接收数据包的帧对齐错误数
rxfifo/s:接收的数据包每秒FIFO过速的错误数
txfifo/s:发送的数据包每秒FIFO过速的错误数
#sar -n SOCK 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/29/2009
01:44:32 AM totsck tc ck ud ck rawsck ip-frag
01:44:34 AM 243 9 8 0 0
01:44:36 AM 242 9 7 0 0
01:44:38 AM 238 9 7 0 0
01:44:40 AM 238 9 7 0 0
totsck:使用的套接字总数量
tc ck:使用的TCP套接字数量
ud ck:使用的UDP套接字数量
rawsck:使用的raw套接字数量
ip-frag:使用的IP段数量
( Mon, 7 Mar 2011 14:40:07 +0800 )
Description:
Another important ramification of the ephemeral port range is that it limits the maximum number of co ectio from one machine to a ecific service on a remote machine! The TCP/IP protocol uses the co ection's 4-tuple to distinguish between co ectio , so if the ephemeral port range is only 4000 ports wide, that mea that there can only be 4000 unique co ectio from a client machine to a remote service at one time.
So maybe you run out of available ports. To get the number of available ports, see
ip_local_port_range
32768 61000
The output is from my Ubuntu system, where I'd have 28,232 ports for client co ectio . Hence, your test would fail as soon as you have 280+ clients.
( Fri, 4 Mar 2011 16:02:53 +0800 )
Description:
查看进程和端口号相关:
1. 查看TCP/UDP端口:
netstat -tuoln
2. 根据端口查看运行的进程:
netstat -a |grep 端口号
lsof -i:端口号
3. 查看进程名运行的端口号:
netstat -a |grep 进程名
4. netstat -tln 查看服务***端口
5. 结束进程
kill -15 pid 立即释放资源
kill -9 pid 不会立即释放资源
6. aux 查看进程
查看网卡信息:
1. / in/ifconfig
( Fri, 18 Feb 2011 11:50:44 +0800 )
Description:
1. 源码下载地址:
导入后缺失第三方库:从Jmeter的binary包的lib目录下把第三方jar包拷贝到工程的lib下,加入buildpath。
这样就能编译通过了。
2. 直接从svn上
check下来:
直接ant编译就可以了。
( Mon, 14 Feb 2011 15:13:28 +0800 )
Description:
1、下载ecli e插件:jadcli e_3.1.0.jar 网址: http://jadcli e.sourceforge.net/ 直接将jadcli e_3.1.0.jar 复制到ecli e的***目录下的plugi 目录下。
注意:jadcli e_3.1.0.jar的版本与ecli e的platform版本号相关
jadcli e_3.1.0.jar版本,该版本支持ecli e3.1M6以上
jadcli e_3.2.0.jar版本,该版本支持ecli e3.2M3和ecli e3.2M4.
jadcli e_3.2.2.jar版本,该版本支持ecli e3.2M5以上。
2、 下载Jad反编译工具:jad.exe 网址: http://ajava.org/tool/other/11519.html 并附有jad简单语法。 将jad反编译工具jad.exe放到某个指定的路径下,如E:\work soft\JAD\jad.exe
3、具体配置。 重新启动ecli e,打开:Window-Preferences-Java-JadCli e.
  Path to decompiler,这里设置反编译工具jad的全路径名,也即是:E:\work soft\JAD\jad.exe。 Directory for temporary files 临时文件路径。
4、 ***完成后,ecli e自动将JadCli e Cla File Viewer设置成cla 文件的缺省打开方式。如果没有默认,可以在Ecli e的Windows—— Perference——General-Editors-File A ociatio 中修改“*.cla ”默认关联的编辑器为“JadCli e Cla File Viewer”。设置完成后,双击*.cla 文件,ecli e将自动反编译。
( Fri, 28 Jan 2011 11:15:54 +0800 )
Description:
在进行邮件协议的测试过程中,因为有数量巨大的邮件样本要进行测试,如果直接在DataProvider中通过手工输入,添加各个邮件样本测试用例,则需要花费较多的时间,如何能更自动化呢? 这里的接口测试使用的框架是testng,那么就充分利用DataProvider了。
设置DataProvider: /** * Service 指定路径下的邮件样本 * @return */ @DataProvider(name="mailsamples") public static Object[][] mailsamples() throws Exception{ ListString filelist = CommonFunction.getAllFiles(ComTestData.samples_path); Object[][] files = new Object[filelist.size()][]; for(int i=0; ifilelist.size(); i++){ files[i] = new Object[]{filelist.get(i)}; } return file }
这样在@Test中直接使用该DataProvider即可: /** * @TestCaseID: * @Describe: 测试指定路径下的所有邮件样本 * @Create 2010.1.27 * @Modified 2010.1.27 * @Result: pa ed */ @Test(dataProvider="mailsamples", dataProviderCla =ComDataProvider.cla ) public void testSendMailSamples(String filedir) throws Exception{ CommonFunction.mailFrom(sender, in, out); CommonFunction.rcptTo(reciever, in, out); //自定义消息头域名,用于标识邮件的唯一性 String xMe ageId = "test" + new Date().getTime(); CommonFunction.data(xMe ageId, filedir, in, out); boolean succeed = CompareMail.compareMail(xMe ageId, filedir); A ert.a ertTrue(succeed); }
其中getAllFiles(String)是将指定路径下的所有邮件样本读到List中: /** * 获取指定路径下所有的文件 * param path 文件夹完整绝对路径 * @param path * @return * @throws Exception */ public static ListString getAllFiles(String path) throws Exception { ListString filelist = new ArrayListString(); File file = new File(path); if (!file.exists()) { throw new Exception(path + " is not exist!!!"); } if (!file.isDirectory()) { throw new Exception( path + " is not a directory!!!"); } String[] tempList = file.list(); File temp = null; for (int i = 0; i tempList.length; i++) { if (path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (temp.isFile()) { filelist.add(path + File.separator + tempList[i]); } if (temp.isDirectory()) { getAllFiles(path + File.separator + tempList[i]); } } return filelist; }
( Fri, 28 Jan 2011 10:53:01 +0800 )
Description: /** * 静态初始化配置参数 */ static { Properties properties = new Properties(); try { I utStream in = new FileI utStream("config.xml"); try { //使用Reader指定字符集。 roperties.load(new I utStreamReader(in, "UTF-8")); } finally { in.close(); } } catch (Exception e) { logger.info("找不到指定的配置文件 config.xml"); e.printStackTrace(); } amples_path = (String)properties.get("samples_path"); }
( Fri, 21 Jan 2011 15:17:09 +0800 )
Description:
工具介绍在网络google下很多内容的,有些都是大同小异的,我觉得我整理的这部分还是比较好的,建议看看。
51Testing软件测试网 I k+n Z | { C+|
-y+n T;E k T0
YSlow是Yahoo开发的一个用于
分 析网站优化的Firefox工具插件,使用时您必须先***有Firefox。YSlow针对网站速度体验上的优化,将其总结为13条,分别用F到A的指标 来对你的网站速度做出评价并给出数据,F代表最差,A代表最好。我们可以通过分析得到的数据对自己的网站和服务器做相应的优化。
51Testing软件测试网 k q7? A5^"P#H6P
这只是一样评测分析,改进还是要靠自己,这里要谈的就是实实在在的如何针对每一条进行优化:
51Testing软件测试网?C @ U A s P |
R+a-j m#G9f M0
1. Make fewer HTTP requests ( 减少Http请求数)
51Testing软件测试网0B x b,v?q a4? ` Y {&am ~
一个网页不可避免的要引入大量的外部文件:Javascript、c 、背景图片……由于Http协议的无状态性,用户的每一次访问,都会重新向服务器请求所有文件,而大量Http请求的累加,正是影响网站速度的最主要原因。
P"Y3h w H8Y U/t'L0
所以这里的解决方法只有一个:合并。最理想的情况莫过于一个网页只包含一个c ,一个js,一张背景图。
r:Q#I Y8S"S w f0
合 并Js和C 文件很好理解,背景图片要怎么合并?这里采用的主要方法是CSS Sprites,简单说就是把所有的图片拼接成一张大图,在不同的C 里指定背景图坐标来显示不同图片。具体可以参考Dave Shea的Image Slicing’s Ki of Death一文,还有网站提供了在线的CSS Sprites服务,只需要上传小图片,就可以获得拼接后的大图以及相应坐标。
j H F J1G S G3I b0
不过在当前越来越多动辄包含10余个文件的开发框架面前,减少 Http请求数也变得越来越难。一直都认为所谓框架,给出的应该是一整套完善的开发思想,从服务器配置到
设 计甚至是到UI体验乃至SEO,但现在很多Framework总是各自为战,后台与前端脱节,只在自己的一片领域里提供一定程度上的方便,没有考虑到最终 产品的统合,甚至连基本的代码侵入性问题没有处理好(这里点名批评dojo,恨不得在所有的html标签上印上dojo的章子),不能不说是一种遗憾。
51Testing软件测试网,D8y?z N N U i i7Y;`
所以如果网站中采用框架的话,在框架的选择面前,建议多采用轻量级,侵入性低的框架,也是为了日后产品的优化维护着想。
51Testing软件测试网8y A M-@ a
51Testing软件测试网 C S j+?%Z4v S
2. Use a CDN (使用CDN,可以略过,不是能力范围)
51Testing软件测试网#i C+X q#g#G v
CDN(Content delivery network)内容分发网络,能够智能根据网络节点情况选择服务节点,大型网站部署时尤为重要。不过这属于硬件级别的解决方案,我们没有条件配置CDN的时候,可以自行设置忽略这一项评测。
51Testing软件测试网)U q J B"F T)\ x Z
在Firefox地址栏键入about:config,然后新建一个字符串,名称为exte io .firebug.yslow.cdnHostnames,值为所要评测网站的域名,多个设置用逗号分隔。例如我的设置就是artwc.com,localhost
51Testing软件测试网 [6x m e6} g.R
51Testing软件测试网?X&am T'l K P
3. Add an Expires header (为文件头指定Expires,文件缓存)
51Testing软件测试网 ^ C g&am S V
Expires是浏览器Cache机制的一部分,浏览器的缓存取决于Header中的四个值: Cache-Control, Expires, Last-Modified, ETag。这个项目的考评主要针对Cache-Control和Expires。
51Testing软件测试网(G.W g r#l,\4U F
具体的Cache原理不是本文所涉及的,有兴趣的同学可以看看Caching Tutorial一文。为了优化这个选项,我们所要做的是对站内所有的文件有针对性的设置Cache-Control和Expires,这里基于Apache主机举例:
_3y:n1i8L h*\ { o f B0
%R M b D)J | E | u M0
首先开启mod_header模块,在httpd.conf中取消
H8Z9R9]"u c*~-f0 LoadModule headers_module modules/mod_headers.so 51Testing软件测试网7L l v | O [?p
一行的注释。然后对于图片,文件等不会经常更新的文件设置一个比较长的过期时间
51Testing软件测试网 V s w L-^ A p b lt;
FilesMatch "\.(ico|pdf|flv|jpg|jpeg| g|gif|js|c |swf)$"
Header et Expire "Thu, 15 Apr 2010 20:00:00 GMT" lt;!-- SPAN--
FilesMatch
> -I ` e%N z L3e g ~)I F0
对于Cache-Control可以设置的更加细致一些,这里对图片,文件设置了7天,对XML,对html、php设置了2小时。
51Testing软件测试网#^-^#?,e'y K,P Y U K lt;
FilesMatch "\.(ico|pdf|flv|jpg|jpeg| g|gif|js|c |swf)$"
Header et Cache-Control "
max-age
, ublic" lt;!-- SPAN--
FilesMatch
FilesMatch "\.(html|htm|php)$"
Header et Cache-Control "
max-age
, must-revalidate" lt;!-- SPAN--
FilesMatch
> Expires也可以通过开启mod_expires来实现
N K+F0q*E1O E0V0
L'_*D5X2}0
51Testing软件测试网$Q D a s s _7{ j$_0g+_/p
4. Gzip components / 启用Gzip压缩
51Testing软件测试网 Q#S r8M { @ k J
HTTP/1.1支持接收服务器端经过Gzip压缩的数据,在Apache2中,可以开启mod_deflate实现。
51Testing软件测试网 W O%m0T o t
同样去掉注释
y/q } d Y P#Z q V l0s0 LoadModule deflate_module modules/mod_deflate.so *k*E H [ c0
然后对所有文本类文件添加Gzip处理
51Testing软件测试网+[ {4H-?# am j r n6w DeflateCompre ionLevel 3 lt;
FilesMatch "\.(php|htm|html|js|c )$"
SetOutputFilter DEFLATE lt;!-- SPAN--
FilesMatch
> L i M7O q K J0
5. Put CSS at the top (将C 文件放在头部)
51Testing软件测试网 o o3\ M ? O c
很好理解的一条,主要是为了避免最后加载C 引起的浏览器白屏,改善用户体验。
51Testing软件测试 Have you taken the
Posted September 25, 2007 by
. Filed under
I’m thrilled to a ounce that Version 2.3 “Dexter” of WordPre is
. This release includes native tagging su ort, plugin update notification, URL handling improvements, and much more. This release is named for the great tenor saxophonist
The entire team is really proud of this release, and I’m ha y that this is our second on-time release under our
. The grand experiment of a more agile WordPre with significant features in the hands of users more often is working. I could write a blog post about each new feature, but I’ll try to be brief:
Native tagging su ort
allows you to use tags in addition to categories on your posts, if you so choose. We’ve included importers for the Ultimate Tag Warrior, Jerome’ Keywords, Simple Tags, and Bu y’ Technorati Tag plugi so if you’ve already been using a tagging plugin you can bring your data into the new system. The tagging system is also wicked-fast, so your host wo #8217;t mind.
Our new
update notification
lets you know when there is a new release of WordPre or when any of the plugi you use has an update available. It works by sending your blog URL, plugi , and version information to our new
api.wordpre .org
service which then compares it to the plugin database and tells you whats the latest and greatest you can use.
We’ve cleaned up URLs a bunch in a feature we call
canonical URLs
which does things like enforce your no-www preference, redirect posts with changed slugs so a link never goes bad, redirect URLs that get cut off in emails on similar to the correct post, and much more. This hel your users, and it also
hel your search engine optimization
, as search engines like for each page to be available in one
location.
Our new
pending review
feature will be great for multi-author blogs. It allows authors to submit a post for review by an editor or administrator, where before they would just have to save a draft and hope someone noticed it.
There is new
advanced WYSIWYG
functionality (we call it the kitchen sink button) that allows you to acce some features of TinyMCE that were previously hidden.
You’ll notice that two of those features are straight out of the
. That’ just the user facing stuff, if you’re a developer you’ll be interested in:
Full and complete Atom 1.0 su ort, including the publishing protocol.
We’re using the new jQuery which is “800% faster.”
Behind the user-facing tags system is a really
, which adds a ton of flexibility. It’ probably the biggest schema upgrade since version 1.5.
The importers have been revamped to be more memory efficient, and you can now add an importer through a plugin.
Through hooks and filters you can now
, the dashboard RSS feeds, the feed parser, and to more than you could in 2.2.
The new
$wpdb-> repare()
way of doing SQL queries.
Finally there were
, with over a hundred people contributing. This is the polish, the hundreds of tiny bug fixes and features that make WordPre what it is.
You can
and some scree hots. And of course
. Before you upgrade you may want to
and the
A number of people are hosting upgrade parties around the world,
. If you are let me know and I’ll promote it on my blog.
No Pings
WordPre 2.3 listo para descargar
La nueva versión mayor de WordPre ha sido puesta a descarga. Se trata de WordPre 2.3, una versión que trae muchas novedades y que nos hace recordar el cambio de 2.0 a 2.1, ya que WordPre 2.3 trae un inme o cambio a nivel de estructura de la ba…
Trackback from
on September 25, 2007
[...] WordPre 2.3 was only released 9 minutes ago (at the time of posting), so my question is, am I the first to upgrade? [...]
Pingback from
on September 25, 2007
[...] The official a ouncement is [...]
Pingback from
on September 25, 2007
[...] 官方信息:引文出处 [...]
Pingback from
on September 25, 2007
[...] WordPre 2.3 is now available. [...]
Pingback from
on September 25, 2007
[...] de WordPre , il y a 21 minutes [...]
Pingback from
on September 25, 2007
[...] WordPre 2.3, code named “Dexter” (for jazz great Dexter Gordon), has shi ed. I’m looking forward to taking it for a in. Look for it to be implemented here on ##ch sometime this week. [...]
Pingback from
on September 25, 2007
[...] Well, we knew it was coming. Fu y though, I thought it would be released in the morning, rather than in the evening. So get your databases backed up, and check your plug in compatibility, because WordPre 2.3 is here! [...]
Pingback from
on September 25, 2007
[...] fin hace 15 minutos fue liberado WordPre 2.3 cuyo nombre es Dexter en homenaje al saxofonista Dexter Gordon. La versión largamente e erada se [...]
Pingback from
on September 25, 2007
[...] full list of features can be found here. There seems to be a bit of problem with the Autosave function now though. After autosave for the [...]
Pingback from
on September 25, 2007
[...] 2.3
WordPre 2.3 has been released and includes some major new [...]
Pingback from
on September 25, 2007
[...] WordPre 2.3 (Via WordPre ) Technorati Tags: Internet, Technology, WordPre , 2.3, Updates, News [...]
Pingback from
on September 25, 2007
[...] Lustig:6MinutennachdemichdiesenBeitragverffentlichthabewurdedieWP Version2.3freigegeben.Timingistebenalles! [...]
Pingback from
on September 25, 2007
[...] WordPre 已经发布了2.3正式版。此前一度有用户以为WP2.3要跳票,好在2.3正式版千呼万唤始出来。美国那边还没到9月25日吧,所以还算不上跳票,哈哈。 [...]
Pingback from
on September 25, 2007
[...] pengumuman Matt mengenai WordPre 2.3 di blog pembangunan [...]
Pingback from
on September 25, 2007
[...] made every effort to upgrade this site prior to the Official Release of WordPre 2.3 and failed miserably. Now that the new software if officially available (as of le than an hour [...]
Pingback from
on September 25, 2007
[...] 本站网址已变更为wuhanist.com,烦请更新收藏夹及链接 WordPre 发布了2.3版本,Matt管这个版本叫做“Dexter”。“Dexter”是为了向“伟大的”次中音萨克斯风手Dexter Gordon。 [...]
Pingback from
on September 25, 2007
[...] WordPre 2.3
Share and Enjoy: These ico link to social bookmarking sites where readers can share and discover new web pages. [...]
Pingback from
on September 25, 2007
[...] honor of the release of WordPre 2.3, which just ha ened a few minutes ago, actually, and because we were all too busy to record a regular episode this week, we’re [...]
Pingback from
on September 25, 2007
[...] Automattic have a ounced the release of WordPre 2.3, which introduces — finally, native tagging su ort. And the folksonomists said, “Amen.” [...]
Pingback from
on September 25, 2007
[...] yeah. WordPre 2.3 is out and available for download. It’ a major milestone for the project both [...]
Pingback from
on September 25, 2007
[...] WordPre 2.3 登場,新版本 WordPre 有以下的新功能。 [...]
Pingback from
on September 25, 2007
[...] just would like to post a little note of interest. WordPre has released a new version of their Blogging software. Yes, CTron does now run under version 2.3, I was ru ing a release candidate and now, I’m [...]
Pingback from
on September 25, 2007
[...] was going to have a “ ormal post” but decided to upgrade to WordPre 2.3 [...]
Pingback from
on September 25, 2007
[...] erfhrt man im Blog-Beitrag und den weiterführenden [...]
Pingback from
on September 25, 2007
[...] out more at the WordPre Development Blog.
Technorati Tags: WordPre , blogging, platform, [...]
Pingback from
on September 25, 2007
[...] .昨天还有朋友抱怨说wordpre 怎么还没升级,估计是不是时差的问题?刚才我看后台已经出现了正式版下载,看到此消息的朋友不妨在赏月之后对博客升级,链接在此,我晚上就把它升级了,现在使用的是2.3RC1 -:) [...]
Pingback from
on September 25, 2007
[...] WordPre Blog WordPre 2.3 [...]
Pingback from
on September 25, 2007
[...] wordpre 2.3 .. [...]
Pingback from
on September 25, 2007
[...] WordPre 2.3 has been released, and there is much rejoicing! Pre Harbor users have no need to upgrade to WordPre 2.3 – you’re soaking in it! (thanks Madge!) [...]
Pingback from
on September 25, 2007
[...] 我已經不知道現在在發展什麼了… 感覺跟 Microsoft 每隔幾年就出個 Windows XX 差不多:WordPre 2.3 公告文。 [...]
Pingback from
on September 25, 2007
[...] 原文出处:
Pingback from
on September 2

参考资料

 

随机推荐