-
linux CD刻录
2007-12-17 11:51:56
1.制作影像文件:mkisofs -r -o cd.iso -m temp burn/
是基本的使用方法,-o cd.iso 指定光盘映像文件名称,-m temp 排除temp目录或文件, burn/ 将该目录下的文件加入到映像中,更高级的使用请参照相关文档或man。
2.光盘拷贝:dd if=/dev/cdrom ōf=cd.iso
3.搜索刻录机:cdrecord -scanbus
4.刻录:cdrecord -v speed=2 dev=0,0,0 cd.iso
高级功能:
1.多段刻录:第一次在盘上刻录一个段时,请在 cdrecord 中使用 -multi 开关:
$ cdrecord -v -eject speed=8 dev=0,1,0 -multi test.iso
盘将会以某种方式被固定下来,使得盘可读,也可以添加更多资料。要向这张盘中添加更多段,mkisofs 需要知道起始扇区号和结束扇区号,可以象下面这样来找到这些号码:
$ cdrecord dev=0,1,0 -msinfo
0,27139
确保把要添加资料的盘放入了 CD 刻录机。然后,添加两个新开关 -C 和 -M:
$ mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,1,0 /files/path/
或者更好的办法是,让命令 shell 完成这项工作:
$ mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,1,0 -msinfo` -M 0,1,0 /files/path/
多段刻录 CD 驱动器读取已写入的最后一个段。上面的命令从最后一个段获取 TOC,然后将它组合进新 TOC 中。在刻录盘上的最后一个段时,请省略 -multi 选项。
CD 映像,通常被称为 ISO 映像,是对 CD 一个字节一个字节的拷贝。映像是 CD 中整个 ISO9660 文件系统的完整副本,使用这种方式能够避免需要一个文件一个文件地发布 CD 的内容。这意味着您之需要处理一个文件,而不必担心如何在新 CD 上创建文件系统以及让该 CD 可用于引导(如果映像原本的 CD 就能引导的话,制作出的 CD 就能)。您只要将该映像刻录至新 CD 就能得到原始 CD 的完整副本。正如您将了解到的,在 Mandriva Linux 系统中,您甚至不需要将该映像刻录到 CD 中就能够访问其中的内容。
章节索引 - 知识库索引
iso、raw、cdr、bin、cue、……
文件扩展名“iso”、“raw”和“cdr”都代表标准的 ISO 映像,并可被标准的“cdrecord”命令处理。
然而“bin”/“cue”映像却属于不同种类。首先,您需要有相互对应的“.cue”和“.bin”文件。然后,您可以使用 cdrdao 将它们刻录到 CD 上,或者使用 bchunk 将它们转换成标准的 .iso 文件。而这两个程序均包含在您的 Mandriva Linux 系统中。
创建 CD 映像
创建 ISO 包含两个步骤:收集您需要放入映像中的文件,以及用这些文件创建映像。
第一步比较简单:创建一个新目录并把文件存入其中。第二步需要使用“mkisofs”工具,它在“cdrecord”软件包中:
mkisofs -r -J -o CD映像.iso 保存文件的目录/
以上命令将把“保存文件的目录”中的文件创建成“CD映像”。“-r”选项启用所谓的“RockRidge”扩展。这一扩展允许 Linux 中超过 8 个字符的文件名并保留文件权限。您应该总是设置这个选项,否则文件名及其权限将被弄乱。
“-J”选项启用所谓的“Joliet”扩展,它为 Windows 提供上述功能(当然,不包括文件权限)。如果您没有设置这个选项,那么使用 RockRidge 创建的长文件名在 Windows 下将被映射成 8 字符文件名。虽然这张 CD 在 Windows 下仍然能够使用,不过为了兼容起见,最好还是使用该选项。
如果您在某个阴冷潮湿的冬季雨日没有别的什么可做的话,不妨阅读一下“mkisofs”的手册页面以了解其余的 40 个选项如何使用 ……
章节索引 - 知识库索引
挂载 CD 映像
要查看某个 ISO 映像中究竟包含什么,您不需要将其刻录至 CD。在 Linux 中您可以直接打开它:
* 以“root”身份创建一个新的目录来挂载该映像:比如“/mnt/iso”:
mkdir /mnt/iso
* 接着挂载该映像(也需要“root”身份):
mount -o loop,unhide -t iso9660 -r /目录/CD映像.iso /mnt/iso
o “-o loop”选项表示将某个文件作为块设备挂载。
o 使用“unhide”选项将显示隐藏文件。
o “-t iso9660”制定映像文件使用 ISO9660 CD-ROM 格式。
o “-r”将以只读方式挂载。
* 然后您就可以像浏览其他目录一样通过浏览 /mnt/iso 查看映像内容。
* 要卸载该映像,请键入:
umount /mnt/iso
顺便提一句,该机制让您即便没有 CD 刻录机(或者手边没有 CD-R 光盘)时也能够安装 Mandriva Linux 下载的 ISO 映像。您只需将这些 ISO 映像放到某个目录中(比如在Windows 分区),使用“dosutils”目录中的“rawwritewin”工具从“hd.img”创建启动软盘。然后使用该软盘启动后根据指示输入存放映像的目录即可。
章节索引 - 知识库索引
检查 CD 映像
参见在 Windows 或 GNU/Linux 下如何检测某 ISO 映像的 MD5 校验和 。
如果您从什么地方下载了某个 ISO 映像,最好事先检验它的校验和。实际上,您不应该使用一个未曾检验的映像。ISO 映像中的错误将导致其中的文件不可用。
这些错误包括文件无法查看,甚至可能损坏文件的一小部分。当您需要使用这些文件的时候(比如安装操作系统时),您将会碰到奇怪的错误(缺少文件或程序崩溃、系统错误、死机等)。
通过比较其 MD5 校验和就能避免上述错误。MD5 校验和可以看作是文件的“数字指纹”。您下载那些 ISO 的目录应该会包含一个文本文件,其中记录了这些指纹。将该文件(只有没几个字节而已)下载到映像所在的目录。然后您可以运行“md5sum”命令,而这个命令在 Linux 系统上是默认安装的:
md5sum *.iso
该命令计算您下载的文件的 MD5 校验和。通常这需要好几分钟。然后,您就可以把计算所得的校验和同“md5校验和_文件”中的数字比较,该文件中包含了远端原始文件的校验和。如果它们相互匹配,那么一切正常(您不必依次比较每一个数字,如果前四个以及最后四个数字相同,那么其余的也应该是相同的)。
要检验某个 CD 映像是否正确刻录至 CD,请将该 CD 放入驱动器,然后执行:
df -k /mnt/cdrom
以获取块数目(以“1千块”计数)。然后,以“root”身份卸载该 CD
umount /mnt/cdrom
并执行:
dd if=/dev/cdrom count=块数目 bs=1024 | md5sum
将上述命令中的“块数目”替换成您在第一个命令结果中得到的数目。而这一命令得出的结果应该符合相应下载文件的校验和。
请注意:为了使得“dd”正常工作,必须事先卸载 CD。而这会让该驱动器在您接下去的会话过程中丧失“supermount”功能。
(感谢 doug_s 贡献此节。)
章节索引 - 知识库索引
刻录 CD 映像
Linux 下刻录 CD 的标准工具是 cdrecord 。只有在刻录音频 CD 是要取消音轨之间的 2 秒间歇或是刻录 cue/bin 映像时才需要使用 cdrdao 。
从硬盘将映像刻录至 CD 如下:
cdrecord -v -eject speed=XX dev=x,y,z cd映像.iso
* “-v”:“详细(Verbose)”模式。这将启用进度条。可选。
* “speed=XX”:速率倍数(例如:4、8、12、16 等)。如果您不知道您的 CD 刻录机的速度,请使用“20”(不要引号)。“cdrecord”将自动调整该数字以适应您的硬件。
* “dev=x,y,z”:这三个数字告诉“cdrecord”应该使用那个设备。执行
cdrecord -scanbus
可以获得您所需的数字。
并不复杂,不是吗?cdrecord 还提供其他许多选项,比如“-dummy”就很有用:它使得 cdrecord 执行整个过程但是却没有实际刻录数据。
使用 cdrdao 刻录 cue/bin 映像如下:
cdrdao write ––device 0,3,0 ––buffers 64 ––eject image.cue
这同上述 cdrecord 命令差别不大。不过您必须确定 cue/bin 文件在同一个目录并且有同样的文件名(除了扩展名不同)。
“当初不是说只要敲三、四下键盘吗?”别那么坚持嘛。;-)好吧。在我的机器上我在“.bashrc”中为 cdrecord 定义了一个别名(alias) :
alias biso='cdrecord -v -eject speed=12 dev=0,6,0'
然后我需要做的就是键入:
biso image.iso
然后一切就自动进行了。
在 KDE 中常用 K3b 刻录 CD。可以在菜单中找到 k3b,或使用命令行开启。“工具/刻录 ISO 映像”菜单项可以用来刻录 ISO 映像,选择 CD 刻录机以及刻录速度。使用中间的蓝色按钮可以选定硬盘上您需要刻录的 ISO 映像。为了安全,您应该用 K3b 检验 MD5 校验和。请注意,选项菜单中的“模拟”需要禁用,否则什么都不会刻录。刻录 ISO 应该总是启用“一次性刻录”。选项“Burnfree”可用来避免缓冲区欠载错误。在刻录 CD 的时候不要运行其他消耗资源的程序。当您将 CD 放入刻录机并按下“刻录”后 CD 刻录就开始了。使用 X-CD-Roast X-CD-Roast 是一个用来创建和复制(又称母本制作)光盘的图形化应用程序。X-CD-Roast 自动化刻录 CD-R 和 CD-RW 的过程,并且它还有许多满足光盘复制和母本制作需求的高度可配置性。 要启动 X-CD-Roast,选择「主菜单」 => 「系统工具」 => 「CD Writer」。要从 shell 提示下启动它,键入 /usr/bin/xcdroast。 X-CD-Roast 首先扫描你的设备总线来寻找 CD-R(W) 驱动器。然后,它会允许你为光盘刻录器、光盘驱动器等等配置设置。图 4-8 显示了「设定」屏幕和配置选项。请注意,你的 CD-R(W) 驱动器品牌可能会与所显示的不同。 图 4-8. X-CD-Roast 设定屏幕 查看你的 CD-R(W) 的生产厂家的文档来设立某些「CD 设定」选项,譬如「CD 烧录速度」和「烧录时 Buffer 大小」。所有的光盘映像(.iso 或 .img)文件需要被贮存在一个能被 X-CD-Roast 程序进入的中心地带。你还得指定一个到硬盘驱动器上至少有 700 MB 空闲空间的文件系统的路径。你可以在「硬碟设定」标签下的「目录」中配置你想贮存光盘映像的路径。 X-CD-Roast 在它的界面之内就提供了详尽的文档,因为其中的很多选项带有自动弹出的长篇描述性提示,它们详细地向你说明相关的功能。你只要把鼠标指针在按钮或拉下菜单上至少停留两秒钟就可以看到这些工具提示(tooltips)。 4.3.2.1. 使用 X-CD-Roast 来复制光盘 要为备份目的而复制已存光盘,在主面板上点击「复制光碟」按钮。你可以在光盘上读取所有的轨道(tracks) — 所有的光盘信息,包括数据和音频,都贮存在轨道中 — 方法是点击「读取光碟」。你可以设立读取光盘的速度,还可以发现其它的关于光盘轨道的信息,如轨道的类型和大小。如果你从一个音频光盘中复制轨道(或称曲目),你可以使用 「播放音轨」来预听每一个曲目。由于 X-CD-Roast 默认读取光盘中的所有轨道,你可以使用「删除音轨」来删除不想要的轨道。 最后,要把这些轨道刻录到 CD-R(W) 介质上,选择「写入光碟」。图 4-9显示了「写入光碟」 对话框,从中你可以配置读取速度、刻写到 CD-R(W) 的速度,以及你是想即时对拷(on-the-fly)地复制光盘,还是在刻录前首先创建一个映像文件。我们推荐后者,因为它有助于防止复制过程中读写错误的发生。点击「写入光碟」按钮来开始刻录进程。 图 4-9. 使用 X-CD-Roast 来复制光盘 4.3.2.2. 使用 X-CD-Roast 来创建光盘 我们提倡你经常备份个人数据和信息以防硬件失败或文件系统损坏。X-CD-Roast 允许你使用「制作光碟」来为硬盘驱动器分区上的文件备份。这一设施允许你使用 Master Source 把文件和目录添加到光盘记录片段(session)中。在 Master Source 对话框中还有些允许你配置高级设置的其它选项;然而,创建数据光盘的默认值已被正确设置,因此没必要进一步配置。图 4-10显示了一个准备备份整个 /home 目录的记录片段。 图 4-10. 使用 X-CD-Roast 来备份硬盘驱动器文件 突出显示你想添加到记录片段中的目录和文件,然后点击「加入」。把所有你想写入 CD-R(W) 的文件和目录添加完毕后,点击「Create session/image」标签来创建 .img 文件。你必须首先点击「Calculate size」,然后点击 Master to image file 来创建映像。 要把你的轨道写入 CD-R(W),点击左侧面板上的「烧入轨」 。在「layout 轨」标签下,突出显示右侧箱内你所创建的映像文件,然后点击「加入」。这个映像就会被显示在左侧的「要烧录的轨」 箱内。点击「接受轨 layout」,然后点击「烧录轨」 标签来返回到主刻写对话框中。 点击「烧录轨」 来把映像刻写到 CD-R(W) 中。 窍门 窍门 你还可以在一个步骤内创建映像并把它写入 CD-R(W),方法是:点击 Create session image 标签内的 Master and write on-the-fly。这会节省几个步骤,但是它有时会导致读写错误。我们建议你使用多步骤的方法而不是即时对烤的方法。 4.3.2.3. 使用 X-CD-Roast 来刻写 ISO 扩展名为 .iso 的大文件又称 ISO9660(或 ISO)映像文件。譬如,Red Hat Linux 可作为 ISO 映像被免费获取,你可以在下载后把它刻写到 CD-R(W) 上。在 FTP 和网站上还有其它 ISO 映像文件,如 .img 和 .raw,但是 ISO 映像是最常用的光盘映像格式。 要使用 X-CD-Roast 来把 ISO 映像文件刻写到 CD-R(W) 上,把 ISO 文件转移到设置时指定的路径中去, 然后点击「制作光碟」。在「Layout 轨」标签下, 突出显示你想刻录的 ISO 映像,点击「加入」,然后点击「接受轨 layout。这会自动载入「烧录轨」标签,在那里你可以点击「烧录轨」 来把映像刻录到 CD-R(W)。
-
linux安装BT下载工具
2010-05-27 15:40:19
首先去下载tar包
linuxBT下载:
wget -c http://heanet.dl.sourceforge.net/sourceforge/azureus/Azureus_2.4.0.2_linux.tar.bz2
要是下载不下来呢?就去Azureus官网下载
http://sourceforge.net/projects/azureus/files/
下载后,将BT压缩包下载到/root/XXX目录,进入/root/XXX目录开始安装
1、#cd
#tar -jxvf Azureus_2.4.0.2_linux.tar.bz2
#cd azureus
#./azureus &
2、可通过在.bashrc里添加以下一行,这样就可以直接运行azureus命令
alias azureus='/root/azureus/azureus' (注:也可以用双引号)
3、#source .bashrc
4、运行BT工具
#azureus &
这样就可以下载BT种子,通过这个软件来下载东西了。大家可以试试啊。 -
Oracle E-Business Suite R12.1.1 安装配置问题总结
2010-05-25 10:02:04
最近安装oracle的商务版本
环境:
- OS:Oracle Enterprise Linux 5.3 (Lastest version)
- VM: Vmware workstation 6.5
- Desktopell PC
- Application :Oracle E-Business Suite R12.1.1 VIS Demo+ 简体中文补丁
安装配置步骤:
- http://edelivery.oracle.com/ 上下载EBS for Linux X86 安装介质
- 安装Vmware workstation 6.5
- 在VM上安装Oracle Enterprise Linux 5.3(可以在http://edelivery.oracle.com/ 下载)
- ftp ebs zip file to Linux
- unzip zip file on linux
- 安装 Oracle E-Business Suite R12.1.1 Visom Demo
- 安装EBS 中文补丁
- 性能稍微调整(因为是测试用,很多参数没必要那么大)
当中的问题总结:
- 安装Linux 尽量把所有包都选择上,否则,安装EBS中会出现错误
- 调整 Linux 的某些参数
- 检查EBS 需要的OS的包
- 做重要的下面两个命令,否则EBS中有错误
# unlink /usr/lib/libXtst.so.6
# ln -s /usr/X11R6/lib/libXtst.so.6.1 /usr/lib/libXtst.so.6
- 修改如下,否则DB 会有错误
以root身份,通过以下命令查询SELinux的模式:getenforce 默认应当返回Enforcing
通过以下命令更改模式:setenforce 0
然后再次查询getenforce,应该返回permissive了
- 安装完毕,主画面没问题,进去FORM出现错误,解决方法:
[oracle@r12test opmn]$ vi HTTP_Server~1.log
[oracle@r12test opmn]$ pwd
/u01/oracle/VIS/inst/apps/VIS_r12test/logs/ora/10.1.3/opmn
[oracle@r12test opmn]$
09/08/10 17:31:50 Start process
--------
/u01/oracle/VIS/inst/apps/VIS_r12test/ora/10.1.3/Apache/Apache/bin/apachectl startssl: execing httpd
/u01/oracle/VIS/apps/tech_st/10.1.3/Apache/Apache/bin/httpd: error while loading shared libraries: libdb.so.2: cannot open shared object file: No such file or directory
--------
09/08/10 17:31:52 Start process
--------
/u01/oracle/VIS/inst/apps/VIS_r12test/ora/10.1.3/Apache/Apache/bin/apachectl startssl: execing httpd
/u01/oracle/VIS/apps/tech_st/10.1.3/Apache/Apache/bin/httpd: error while loading shared libraries: libdb.so.2: cannot open shared object file: No such file or directory
32,1 Bot
ln -s /usr/lib/libdb-4.3.so /usr/lib/libdb-3.3.so
[root@r12test ~]# ln -s /usr/lib/libgdbm.so /usr/lib/libdb.so.2
had to use this instead:
ln -s /usr/lib/libgdbm.so.2 /usr/lib/libdb.so.2
[root@r12test ~]# ls -rtl /usr/lib/libdb.so.2
lrwxrwxrwx 1 root root 19 Aug 10 17:47 /usr/lib/libdb.so.2 -> /usr/lib/libgdbm.so
- 打中文补丁前,先打如下补丁:
Patch 8508724
- 打到最后还剩8个的时候出现错误。
Applying 6678700_PTB - 12.1.1 : Upgrade Patch
Fails on : FAILED: file XLIFFLoader.class on worker 1.
--------details-------------------------
Invoking Utility XLIFFLoader ...
Class: oracle.apps.xdo.oa.util.XLIFFLoader
Method: processXLIFF
Arguments: UPLOAD -DB_USERNAME &un_apps -DB_PASSWORD &pw_apps -JDBC_CONNECTION &jdbc_db_addr
-APPS_SHORT_NAME OFA -TEMPLATE_CODE FADTXD -FILE_NAME
&fullpath:faatch/115/publisher/templates/PTB:FADTXD.xlf
TimeStamp : [Wed Jul 01 22:53:56 BRT 2009]
==========================================================
XLIFFLoader started: Wed Jul 01 22:53:56 BRT 2009
[FILE_NAME]
[/d01/oracle/VIS/apps/apps_st/appl/fa/12.0.0/patch/115/publisher/templates/PTB/FADTXD.xlf]
[APPS_SHORT_NAME] [OFA]
[UPLOAD] [UPLOAD]
[DB_USERNAME] [APPS]
[JDBC_CONNECTION]
[(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=YES)(FAILOVER=YES)(ADDRESS=(PROTOCOL=tcp)
(HOST=<host>.<domain>(PORT=<port>))(CONNECT_DATA=(SID=<sid>))]
[DB_PASSWORD] [*****]
[TEMPLATE_CODE] [FADTXD]
Target file: FADTXD.xlf
[070109_105356316][][EXCEPTION] java.io.UTFDataFormatException: Invalid UTF8 encoding.
at oracle.xml.parser.v2.XMLUTF8Reader.checkUTF8Byte(XMLUTF8Reader.java:160)
at oracle.xml.parser.v2.XMLUTF8Reader.readUTF8Char(XMLUTF8Reader.java:203)
at oracle.xml.parser.v2.XMLUTF8Reader.fillBuffer(XMLUTF8Reader.java:120)
at oracle.xml.parser.v2.XMLByteReader.saveBuffer(XMLByteReader.java:450)
at oracle.xml.parser.v2.XMLReader.fillBuffer(XMLReader.java:2488)
at oracle.xml.parser.v2.XMLReader.tryRead(XMLReader.java:1089)
at oracle.xml.parser.v2.XMLReader.scanXMLDecl(XMLReader.java:3047)
at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:521)
at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:288)
at oracle.apps.xdo.oa.util.TemplateTranslator.createMLSTemplates(TemplateTranslator.java:238)
at oracle.apps.xdo.oa.util.XLIFFLoader.processUpload(XLIFFLoader.java:738)
at oracle.apps.xdo.oa.util.XLIFFLoader.process(XLIFFLoader.java:586)
at oracle.apps.xdo.oa.util.XLIFFLoader.processXLIFF(XLIFFLoader.java:1153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at oracle.apps.ad.worker.AdJavaWorker.invokeUtility(AdJavaWorker.java:503)
at oracle.apps.ad.worker.AdJavaWorker.main(AdJavaWorker.java:356)
Exception while parsing base template
==========================================================
Done calling the utility function. Return Code = [1] TimeStamp = [Wed Jul 01 22:53:56 BRT 2009]
Updating task with status 1
AD Worker error:
The utility XLIFFLoader returned error for the above task.
解决方法
-- To implement the solution, please execute the following steps::
1. In a separate UNIX session, set the APPS environment.
2. Then run the following commands from the command line.
Please note each is a single command.
In these commands, it is assumed the APPS username and password is apps/apps. If this is not correct then please change them approriately in this section:
-DB_USERNAME apps -DB_PASSWORD apps
Command to reload US XML
adjava -ms128m -mx256m -nojit oracle.apps.xdo.oa.util.XDOLoader UPLOAD
-DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION
"(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=YES)(FAILOVER=YES)(ADDRESS=(PROTO=tcp)(HOST=<host.dimain- taken from error message above>(PORT=<port- taken from error message above>))(CONNECT_DATA=(SID=<sid - taken from error message above>))"
-LOB_TYPE DATA_TEMPLATE -APPS_SHORT_NAME OFA -LOB_CODE FADTXD -LANGUAGE 00
-XDO_FILE_TYPE XML-DATA-TEMPLATE -FILE_NAME
$FA_TOP/patch/115/publisher/defs/FADTXD.xml
_______________________________________________________________________
.
Command to reload US RTF
.
adjava -ms128m -mx256m -nojit oracle.apps.xdo.oa.util.XDOLoader UPLOAD
-DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION
"(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=YES)(FAILOVER=YES)(ADDRESS=(PROTOCOL=tcp)(HOST=<host.dimain- taken from error message above>(PORT=<port- taken from error message above>))(CONNECT_DATA=(SID=<sid - taken from error message above>))"
-LOB_TYPE TEMPLATE_SOURCE -APPS_SHORT_NAME OFA -LOB_CODE FADTXD -LANGUAGE en
-TERRITORY US -XDO_FILE_TYPE RTF -TRANSLATE Y -FILE_NAME
$FA_TOP/patch/115/publisher/templates/US/FADTXD.rtf
Once the commands have completed successfully, restart the failed worker and verify the equivalent language script. runs successfully.
声明:以上只是基本测试,正式生产环境请严格安装ORACLE 正式文档操作和正常的IT规划去操作
-
三大手机浏览器评测 耗时耗流详细对比
2010-05-20 15:22:56
引:http://pcedu.pconline.com.cn/pingce/pingceother/1005/2127306.html
2009年底手机上网用户就突破了2.33亿,并且以100%以上的速度增长着。与此同时,Symbian、Android、iPhone、Windows Moblie 等智能手机平台也纷纷提升手机上网性能。移动互联网爆炸式增长在即。
软件名称: QQ手机浏览器(手机QQ农场) 软件版本: 1.1 贺岁版 软件大小: 519k 软件授权: 免费 适用平台: Symbian 下载地址: QQ手机浏览器(手机QQ农场) 软件名称: UCWEB手机浏览器 For Symbian 软件版本: 7.20 软件大小: 710k 软件授权: 免费 适用平台: Symbian 下载地址: UCWEB手机浏览器 For Symbian 软件名称: 手机网页浏览器Opera Mini 软件版本: 5.0 beta 软件大小: 222k 软件授权: 免费 适用平台: Java 下载地址: 手机网页浏览器Opera Mini 但是目前大部分手机自带浏览器上网速度、上网体验表现一般,再加之智能手机对第三方手机浏览器的强大兼容性,目前使用第三方手机浏览器的用户高达50%以上,使用最多的莫过于UCWEB 浏览器、手机QQ浏览器(以下简称QQ)、Opera,三者几乎占据第三方手机浏览器95%以上份额。
手机QQ浏览器
UCWEB 浏览器
Opera今天笔者就从直连和代理两个模式下测试这三款手机浏览器的wap1.0、wap2.0、www的打开速度、打开流量,以及下载速度、下载流量。本测试使用手机为N81手机,S60 V3版本UC7.2、QQ1.2、OPERA mini5,截图软件为Remote.S60.3rd。为保证测试的公正性,我们将每个网站均打开5次,然后计算五次所用时间平均值,而流量测试则为5次打开网站所有流量平均值。
先展示下综合测试评分和总结:(优秀:四星;良好:三星;一般:两星):
详细测试数据如下:
一、直连和代理模式下打开wap1.0耗时PK
手机浏览器作为手机上网平台和入口,速度决定用户体验的关键性指标,因此我们首先来测试三款手机浏览器打开不同类型网站的速度。这里选取WAP1.0网站5个,分别为sina.cn、wap.sohu.com、kong.net/index.jsp、wap.3g.cn、3g.pp.cn,每个网站打开5次,用秒表计时,最后取5次测试结果的平均值为打开网页时间的最后成绩。
(1)直连模式下打开wap1.0耗时数据:(Opera Mini5不区分代理与非代理,所以数据相同)
直连模式下打开wap 1.0耗时对比(s)网站(直连)UCWEBQQOpera Mini优胜者sina.cn5.664.94.98QQwap.sohu.com3.863.123.89QQkong.net/index.jsp5.032.992.45Operawap.3g.cn4.923.845.61QQ3g.pp.cn4.323.543.17Opera(2)代理模式下打开wap 1.0耗时数据:
代理模式式下打开wap 1.0耗时对比(s)网站(代理)UCWEBQQOpera Mini优胜者sina.cn5.384.54.9QQwap.sohu.com5.383.663.89QQkong.net/index.jsp7.465.282.3Operawap.3g.cn5.416.355.8QQ3g.pp.cn8.56.52.77Opera结论:在直连模式下,打开五个网友经常访问wap1.0网站,三大手机浏览器表现都非常不错,打开速度基本相当,其中,QQ、Opera Mini的速度优于UCWEB,五局三胜。在代理模式下,QQ与Opera Mini分别胜两局。此局PK,QQ胜出。
二、直连和代理模式下打开wap2.0耗时PK
由于wap 2.0有着更好的兼容性和更优秀的打开效果,而且随着手机上网资费的大幅下调,wap 2.0取代wap 1.0指日可待。接下来就测试下在直连和代理模式下,三大手机浏览器打开新浪3G、凤凰、搜狐炫 、猫扑、淘宝这五大常用网站所耗费的时间。
(1)直连模式下打开wap2.0耗时:
直连模式下打开wap 2.0耗时对比(s)网站(代理)UCWEBQQOpera Mini优胜者新浪3G4.74.845.74UCWEB凤凰4.426.15.2UCWEB搜狐炫12.97.187.60QQ猫扑4.033.883.72Opera淘宝5.723.584.32QQ(2)代理模式下打开wap2.0耗时:
代理模式下打开wap 2.0耗时对比(s)网站(代理)UCWEBQQOpera Mini优胜者新浪3G5.725.025.74QQ凤凰7.746.085.2UCWEB搜狐炫13.766.97.6QQ猫扑4.045.263.72Opera淘宝3.685.54.32UCWEB结论:通过以上十次测试,其中UCWEB胜出3次,QQ1.2胜出4次,Opera Mini胜出3次,因此在打开wap2.0网页的时候,三大浏览器水平相当,QQ1.2略占优势。
三、打开www网站耗时PK
当前越来越多的手机用户都希望能够通过手机打开www页面,直接访问互联网。而参与本次测试的三大手机浏览器都具备www网页访问功能。接下来,测试三大手机浏览器打开网易、新浪、百度、大旗、天涯五个www网站所用时间。
打开www网站耗时对比(s)www 网站UCWEBQQOpera Mini优胜者网易10.3812.7615.65UCWEB新浪18.9810.6418.43QQ百度6.63.783.6Opera大旗28.831.3231.76Opera天涯17.219.1818.32UCWEB结论:在直连和代理模式下访问www网页,三大浏览器都没有出现假死现象,都相对比较稳定。一共五局PK,QQ胜一局,UCWEB胜出三局,因此本轮PK,UCWEB胜出。
四、直连和代理模式下下载文件耗时PK
为了测试下载速度,并保证公正性,我们特意选取23k、135k和1.6M的三个文件,在代理模式下则选择23k、135k、1.47M的三个文件,进行下载测试。测试数据如下:
(1)直连模式下下载速度PK
文件大小UCWEBQQOpera Mini优胜者23k7.46 6.5 11.2 QQ 135k 15.62 25.1 13.64 Opera1.6M 133.64 164.84 145 UCWEB (2)代理模式下下载速度PK
文件大小UCWEBQQOpera Mini优胜者23k10.86 10.32 11.2 QQ 135k 42.74 21.96 13.64 Opera1.6M 140.28 182.32 145 UCWEB 结论:在直连状态下,三大浏览器各胜一次,在代理模式下,由于Opera Mini不区分代理和直连,所以Opera Mini分数与直连模式一致。而QQ与UCWEB在下载小于100K的文件时,QQ优于UCWEB,但是下载大于100K的文件时,UCWEB耗时少于QQ。此局PK,三者势均力敌。
五、直连和代理模式下打开wap 1.0耗流PK
通过直连和代理模式打开wap 1.0网站对流量的消耗会是怎么样呢?还是以测试耗时用的五个wap 1.0为例进行测试,以下所有数据均为5次打开同一网站所耗流量平均值。具体测试数据如下:
(1)直连模式下打开wap1.0网站耗流数据:
直连模式下打开wap 1.0网站耗流数据对比(k)网站(直连)UCWEBQQOpera Mini优胜者sina.cn14.5318.1716.35UCWEBwap.sohu.com13.1110.2311.01QQkong.net/index.jsp19.2513.0614.01QQwap.3g.cn23.0518.3719.96QQ3g.pp.cn11.1112.0710.75Opera(2)代理模式下打开wap1.0网站耗流数据:
代理模式下打开wap 1.0网站耗流数据对比(k)网站(直连)UCWEBQQOpera Mini优胜者sina.cn17.3220.0516.45Operawap.sohu.com10.608.9610.62QQkong.net/index.jsp17.1613.0614.01QQwap.3g.cn23.0513.2413.95QQ3g.pp.cn11.1112.0710.75Opera结论:在直连模式下,QQ实现了五局三胜,在非代理模式下,QQ实现了五局四胜,最终这轮PK QQ1.2胜出,打开wap1.0网页QQ手机浏览器最省流量。
六、直连和代理模式下打开wap2.0耗流PK
在直连和代理模式下,三大浏览器打开wap 2.0网站谁最省流量呢?仍然以测试耗时的时候使用的五个wap 2.0网站为样本就行测试。以下所有数据均为5次打开同一网站所耗流量平均值。测试结果如下:
(1)直连模式下打开wap 2.0网站耗流:
直连模式下打开wap 2.0网站耗流对比(s)网站(代理)UCWEBQQOpera Mini优胜者新浪3G24.7235.1917.93Opera凤凰28.9129.8226.87Opera搜狐炫35.9934.7935.58QQ猫扑25.7521.3922.16QQ淘宝27.6417.5221.53QQ(2)代理模式下打开wap2.0网站耗流:
代理模式下打开wap2.0网站耗流对比(s)网站(代理)UCWEBQQOpera Mini优胜者新浪3G26.5225.2725.73UCWEB凤凰21.0225.1326.87UCWEB搜狐炫51.8940.0145.58QQ猫扑22.778.3922.16QQ淘宝20.6126.0521.53UCWEB结论:在直连模式下打开五个wap 2.0网站所耗费流量对比中,QQ五局三胜,UCWEB和Opera Mini各胜出一次;在代理模式下打开五个wap 2.0网站,QQ仍然五局两胜,UCWEB五局两胜。所以本轮PK, QQ和UCWEB都略胜于Opera,但差距不大。
七、打开www耗流PK
在直连模式下,三大浏览器打开www网站谁最省流量呢?仍然以测试耗时的时候使用的五个www网站为样本就行测试。以下所有数据均为5次打开同一网站所耗流量平均值。测试结果如下:由于UCWEB和QQ都采取了服务器压缩省流量模式,因此与Opera Mini的缩放模式没有可比性,Opera打开的是全页面,耗费流量巨大。
打开www网站耗流对比(s)www 网站UCWEBQQOpera Mini优胜者网易29.530.01/UCWEB新浪60.0216.54/QQ百度16.406.56/QQ大旗84.1426.09/QQ天涯42.0613.86/QQ结论:在本轮测试中,可能由于UCWEB和QQ浏览器的压缩模式不同,导致测试结果相差较大。可能这也同两个产品的不同定位、技术方法和策略有一定的关系。
八、直连和代理模式下下载文件耗流PK
在直连和代理模式下,三大浏览器下载文件谁最省流量呢?仍然以测试耗时的时候使用的三个文件为样本就行测试。以下所有数据均为5次下载同一文件所耗流量平均值。测试结果如下:
(1)直连模式下下载文件耗流:
文件大小UCWEBQQOpera Mini优胜者23k34.47K 34.97K 35.25K UCWEB 135k 156.41K 155.32K 158.12K QQ 1.6M 1.67M 1.69M 1.77M UCWEB (2)代理模式下下载文件耗流:
文件大小UCWEBQQOpera Mini优胜者23k34.38k 29.37k 34.25k QQ 135k 156.96k 148.99k 156.12k QQ 1.6M 1.58M 1.43M 1.65M QQ 结论:在直连模式下,三大手机浏览器下载所消耗的流量基本相当,差别甚微,UCWEB以略微的优势领先对手;在代理模式下,QQ表现出省流量的优势来,但是与对手们的差别也并不是很大。此局优胜者属于UCWEB和QQ。
九、测试总结:
通过直连和代理模式下,打开wap 1.0、wap 2.0、www、下载文件八个方面的详细测试,最终我们可以得出以下结论:
首先,三大主流手机浏览器在测试过程中均表现良好,未出现掉线、无法打开网页等稳定性问题。对网页的显示和优化也都可圈可点,三者均能满足手机用户便捷上网的需求。
其次,QQ浏览器相比之前的版本有较大提高,在打开wap 1.0、wap 2.0、www网页的时候速度、流量多次与UCWEB齐平,在wap 1.0耗时耗流、wap 2.0耗时耗流上有超越略UCweb的趋势,在打开www页面方面,QQ显示效果还有待改进。
再次,UCWEB在下载较大文件时的速度优势仍然存在,弱点是打开wap 1.0、wap 2.0耗时耗流均比QQ略大,需要改进。
最后,Opera Mini在打开wap 2.0和www网页的耗时方面有明显优势,但是在打开www网页的流量控制方面仍需努力。
其实最后还要做一下各个平台浏览器的使用情况。
artjsLoadCompleteStyle("http://www1.pconline.com.cn/2009/article09/article09.css")
linux下释放被cache占用的物理内存
2010-05-19 14:51:55
当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.
先来说说free命令 [root@server ~]# free -m total used free shared buffers 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 有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94 那么我们来看看,如果我执行复制文件,内存会发生什么变化. [root@server ~]# cp -r /etc ~/test/ [root@server ~]# free -m total used free shared buffers cached Mem: 249 244 4 0 8 174 -/+ buffers/cache: 62 187 Swap: 511 0 511 在命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法. 引用http://www.wujianrong.com/archives/2007/09/linux_free.html"为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。" 那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>? [root@server test]# free -m total used free shared buffers cached Mem: 249 244 5 0 8 174 -/+ buffers/cache: 61 188 Swap: 511 0 511 MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的! /proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下: [root@server test]# cat /proc/sys/vm/drop_caches 0 首先,/proc/sys/vm/drop_caches的值,默认为0 [root@server test]# sync 手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件) [root@server test]# echo 3 > /proc/sys/vm/drop_caches [root@server test]# cat /proc/sys/vm/drop_caches 3 将/proc/sys/vm/drop_caches值设为3 [root@server test]# free -m total used free shared buffers cached Mem: 249 66 182 0 0 11 -/+ buffers/cache: 55 194 Swap: 511 0 511 再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache. 有关/proc/sys/vm/drop_caches的用法在下面进行了说明 /proc/sys/vm/drop_caches (since Linux 2.6.16) Writing to this file causes the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free. To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches; to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches. Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync(8) first. |
Axure RP Pro 5的注册码
2010-05-04 13:38:19
注册码:Name:yaolanwang
Serial:ogj1xp3rOKIyiMCh0w9ZIlujXKeBOE0CeuEjX2yNfDnO1IsJd3xdd7jMSe/iO2Ly
另,为e文好的朋友附上自学Axure RP的几个途径:
1、 打开软件,按F1调取帮助文档,对照文档学习。
2、 登录http://www.axure.com/au-home.aspx 查看flash视频学习。
3、 登录 Axure 博客 http://axure.com/cs/blogs/Default.aspx,了解软件最新信息。
4、 登录讨论组http://axure.com/cs/forums/Default.aspx,参与讨论。
Name:3ddown
Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq+7w1RH97k5MWctqVHA
这个两个注册码我都测试过了,5.5和5.6都可以使用。
还有一个大家可以共同学习的一个网站:
http://cn.userxper.com/
多个字段,大量记录的插入操作技巧
2010-04-29 13:00:30
但是在很多工程里,逐条输入数据是不被允许的.
比如,输入学生的考试成绩,逐条输入需要点击"提交"40多次,这很大程度消磨了班主任的耐心和时间,如何"一口气"输入完一个班级的数据,是校园管理系统的一个要点(当然,其他场合也经常有这种要求)
下面的文章仅仅是我的工作经验,供学习PHP的同道们参考.(高手大概会一笑了之吧)
主要思路有二:
1.动态生成表单和域的属性
2.用变量表示变量
首先看看数据结构:
create table score
(
score_id int unsigned primary key auto_increment,
s_no int unsigned not null,
grade tinyint not null,
class tinyint not null,
class2 tinyint ,
subject char(6) not null,
score tinyint default '0'
)type=MYISAM;
create table students
(
imitate int unsigned primary key,
s_no int unsigned ,
s_name char(10) not null,
......
)type=MYISAM;
其中s_no是学号,是整个程序的关键.由于这个学校语数外是分8个等级班的,所以,成绩表中多一个class2字段.
目的是在一个表单中输入全班40多人的"分类班,成绩"数据,一次性提交.
由于输入牵涉多个字段,而且需要插入的记录不止一条,给编程提高了难度.这里牵涉了2个字段,但是我们举一反三后可以解决任何多个字段的问题.(当然,表单是需要动态生成的.)
废话不多说了,看看源代码吧:
(因为这个站点没有把html标签给过滤掉,请大家把下面代码copy到dreamweaver的代码视图里再看.)
<html>
<?
//连接数据库
include("const.php");
include("link.php");
//如果没有表单提交,执行下面操作
if(!empty($HTTP_POST_VARS)) {
//获得POST变量
$grade = $_POST["grade"];
$tclass = $_POST["tclass"];
//由于学号最后两位不会超过60,我们一个一个接收
for($i = 1;$i < 60;$i++) {
//第一条记录的分类班和成绩的"变量名"(注意还不是数值)
$fenlei = "a".$i;
$score = "b".$i;
//因为学号可能有间隔,先判断值是否存在
if(!empty($_POST["$fenlei"]) && !empty($_POST["$score"]))
{
//如果register_globals = on,则下面直接使用$$fenlei和$$score.
//我们假设register_globals = on,如果你的设置不是,那么请再定义两个变量接收它们的值.
//重新生成完整的学号.
$s_no = $grade*10000+$class*100+$i;
//生成query语句,用到了"变量的变量".当然,如果register_globals = off,则又有不同.
$query = "insert into score (s_no,grade,class,class2,score) values ('$s_no','$grade','$tclass','".$$fenlei."','".$$score."')";
//显示,看看语句是否正确.
echo $query."<br>";
//执行语句,我没有写出来.
}
}
}
?>
<head>
<title>TEST</title>
<meta. http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form. action="test.php" method="post" name="form1"
target="_self">
<table width="400" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td height="20" colspan="3">年级(入学年):
<input name="grade" type="text" id="grade"
size="10" maxlength="2">
班级:
<input name="tclass" type="text" id="tclass"
size="10" maxlength="2"></td>
</tr>
<tr>
<td width="200" height="20">学号</td>
<td width="100">分类班</td>
<td width="100">成绩</td>
</tr>
<?
//取得学生的学号.应该在此前获得班级和年级,并写进where子句的,但我们只是做个试验,就省略了.
$query = "select s_no from students where ......";
$re = mysql_query($query,$lnk);
while($form. = mysql_fetch_object($re))
{
//获得学号的最后两位.
$student_no = $form->s_no % 100;
?>
<tr>
<td height="20">
<?=$form->s_no;?>
</td>
<!-动态生成text域的name属性,注意!不要写id属性,以免重复!->
<td><input name="a<?=$student_no;?>" type="text"
size="10" maxlength="10"></td>
<td><input name="b<?=$student_no;?>" type="text"
size="10" maxlength="10"></td>
</tr>
<?
}
?>
<tr>
<td height="20" colspan="3"><div align="center">
<input type="submit" name="Submit" value="Submit">
</div></td>
</tr>
</table>
</form>
</body>
</html>
结果如下,共有这么些SQL语句被执行:
insert into score (s_no,grade,class,class2,score) values ('990001','99','6','a','90')
insert into score (s_no,grade,class,class2,score) values ('990002','99','6','a','86')
insert into score (s_no,grade,class,class2,score) values ('990003','99','6','a','84')
insert into score (s_no,grade,class,class2,score) values ('990005','99','6','b','75')
insert into score (s_no,grade,class,class2,score) values ('990006','99','6','b','80')
insert into score (s_no,grade,class,class2,score) values ('990007','99','6','b','79')
一个班级需要40多次循环,mysql_query()函数执行40余次,在网络环境较好的情况下,耗时1秒左右(mysql就是快)当然,可以生成一条超长的SQL语句,执行一次query.至于哪个效率更高,大家自己试试看吧.
这个方法的优点就是可以不必一次次点击"递交",不足之处在于,一次必须把数据全部输入!(有点矛盾?)是的!如果再次使用这个功能,而又输入重复的数据会怎样?解决办法是有的,就是每次循环时执行query前,判断该记录是否存在.这似乎又得执行一条额外的query.就是说,要确保数据正确,而一个班有n个人的话,总共需要N*2次query.
还有一个办法是在生成表单的时候加以限制,这样可以分散系统负荷,明显要好过前一个方案.
不知道还有没有更好的办法使效率和稳定兼得,靠大家指教了.
下面是我在测试mysql和sql server2005时候写的php
<?php
//echo 'ttttttt';
$conn = mysql_connect("192.168.1.", "数据库用户名", "数据库密码") or die ("database link error");
var_dump($conn);
//mysql_select_db("test", $conn);
//mysql_query("set names 'GBK'");
$sql = "INSERT INTO `test`.`test`(`content`) VALUES ( 'test')";
for ($i=1;$i<10000000;$i++) {
$sql = "INSERT INTO `test`.`test`(`content`) VALUES ( 'testtest')";
mysql_query($sql);
}
//echo $sql;
//mysql_query('TRUNCATE test.test;');
?>
Sql2005使用php
<?php
require_once('mssql.class.php');
$CFG['db_config'] = array(
'db_ms'=>'dblib',
'db_host' => '192.168.1.' ,
'db_name' => 'test' ,
'db_user' => 'sa' ,
'db_password' => '' ,
'db_port' => 1433 ,
'db_code' => "utf8" ,
'db_persistent' => ""
);
$db = new PDOMM();
$sql = "insert into test1 (content) values ('testtest')";
//print_r($db->getAll("select * from test1"));
for ($i=0;$i<1000000;$i++) {
$db->execute($sql);
}
?>
http://www.phpchina.com/index.php这里面有很多关于php和mysql信息
大量小文件的实时同步方案
2010-04-19 12:35:46
之前看了Amazon的Dynamo的设计文档,它们每个节点的数据是通过Hash Tree来实现同步,既有通过日志来同步的软实时特点(msyql, bdb等),也可以保证最终数据的一致性(rsync, unison等)。Hash Tree的大体思路是将所有数据存储成树状结构,每个节点的Hash是其所有子节点的Hash的Hash,叶子节点的Hash是其内容的Hash。这样一 旦某个节点发生变化,其Hash的变化会迅速传播到根节点。需要同步的系统只需要不断查询跟节点的hash,一旦有变化,顺着树状结构就能够在logN级 别的时间找到发生变化的内容,马上同步。
文件系统天然的是树状结构,尽管不是平衡的数。如果文件的修改时间是可靠的,可以表征文件的变化,那就可以用它作为文件的Hash值。另一方面,文件的修 改通常是按顺序执行的,后修改的文件比早修改的文件具有更大的修改时间,这样就可以把一个目录内的最大修改时间作为它的修改时间,以实现Hash Tree。这样,一旦某个文件被修改,修改时间的信息就会迅速传播到根目录。
一般的文件系统都不是这样做的,目录的修改时间表示的是目录结构最后发生变化的时间,不包括子目录,否则会不堪重负。因为我们需要自己实现这个功能,利用 Linux 2.6内核的新特性inotify获得某个目录内文件发生变化的信息,并把其修改时间传播到它的上级目录(以及再上级目录)。Python 有 pyinotify,watch.py的代码如下:
#!/usr/bin/python
from pyinotify import *
import os, os.path
flags = IN_CLOSE_WRITE|IN_CREATE|IN_Q_OVERFLOW
dirs = {}
base = '/log/lighttpd/cache/images/icon/u241'
base = 'tmp'
class UpdateParentDir(ProcessEvent):
def process_IN_CLOSE_WRITE(self, event):
print 'modify', event.pathname
mtime = os.path.getmtime(event.pathname)
p = event.path
while p.startswith(base):
m = os.path.getmtime(p)
if m < mtime:
print 'update', p
os.utime(p, (mtime,mtime))
elif m > mtime:
mtime = m
p = os.path.dirname(p)
process_IN_MODIFY = process_IN_CLOSE_WRITE
def process_IN_Q_OVERFLOW(self, event):
print 'over flow'
max_queued_events.value *= 2
def process_default(self, event):
pass
wm = WatchManager()
notifier = Notifier(wm, UpdateParentDir())
dirs.update(wm.add_watch(base, flags, rec=True, auto_add=True))
notifier.loop()
在已经有Hash Tree的时候,同步就比较简单了,不停地获取根目录的修改时间并顺着目录结构往下找即可。需要注意的是,在更新完文件后,需要设置修改时间为原文件的修 改时间,目录也是,保证Hash Tree的一致性,否则没法同步。mirror.py的代码如下
#!/usr/bin/python
import sys,time,re,urllib
import os,os.path
from os.path import exists, isdir, getmtime
src = sys.argv[1]
dst = sys.argv[2]
def local_mirror(src, dst):
if exists(dst) and mtime == getmtime(dst):
return
if not isdir(src):
print 'update:', dst
open(dst,'wb').write(open(src).read())
else:
if not exists(dst):
os.makedirs(dst)
for filename in os.listdir(src):
local_mirror(os.path.join(src,filename), os.path.join(dst,filename))
os.utime(dst, (mtime,mtime))
def get_info(path):
f = urllib.urlopen(path)
mtime = f.headers.get('Last-Modified')
if mtime:
mtime = time.mktime(time.strptime(mtime, '%a, %d %b %Y %H:%M:%S %Z'))
content = f.read()
f.close()
return int(mtime), content
p = re.compile(r'([\d.]+?) +([\w/]+)')
def remote_mirror(src, dst):
mtime, content = get_info(src)
if exists(dst) and mtime == int(getmtime(dst)):
return
print 'update:', dst, src
if not src.endswith('/'):
open(dst,'wb').write(content)
else:
if not exists(dst):
os.makedirs(dst)
for mt,filename in p.findall(content):
mt = int(float(mt))
lpath = dst+filename
if not exists(lpath) or int(getmtime(lpath)) != mt:
remote_mirror(src+filename, lpath)
os.utime(dst, (mtime,mtime))
if src.startswith('http://'):
mirror = remote_mirror
else:
mirror = local_mirror
while True:
mirror(src, dst)
time.sleep(1)
如果源文件不在同一台机器上,可以通过NFS等共享过来。或者可以通过支持列目录的HTTP服务器来访问远程目录,mirror.py 已经支持这种访问方式。server.py 是用webpy做的一个简单的只是列目录的文件服务器。由于瓶颈在IO上,它的性能不是关键。server.py的代码如下:
#!/usr/bin/python
import os,os.path
import web
import time
root = 'tmp'
HTTP_HEADER_TIME = '%a, %d %b %Y %H:%M:%S %Z'
class FileServer:
def GET(self, path):
path = root + path
if not os.path.exists(path):
return 404
mtime = time.localtime(os.path.getmtime(path))
web.header('Last-Modified', time.strftime(HTTP_HEADER_TIME, mtime))
if os.path.isdir(path):
for file in os.listdir(path):
if file.startswith('.'): continue
p = os.path.join(path,file)
m = os.path.getmtime(p)
if os.path.isdir(p):
file += '/'
print m, file
else:
print open(path,'rb').read()
urls = (
"(/.*)", "FileServer",
)
if __name__ == '__main__':
web.run(urls, globals())
为了获得更好性能,以达到更好的实时性,Hash Tree最好是平衡的,比如BTree。如果一个文件发生变化,同步它需要进行的IO操作为N*M,其中N为数的层数,M为每层的文件数目。现在我们N为 2,M最大为10000,适当减少它可以获得更好的性能,比如N为4,M为100。在以后创建目录结构时,最好能够考虑这方面的因素。
转[电子商务测试]版精华帖汇总
2010-04-15 15:54:38
http://bbs.51testing.com/thread-136405-1-1.html
[原创]HttpWatch工具简介及使用技巧
http://www.cnblogs.com/mayingbao/archive/2007/11/30/978530.html
[原创]Web测试常用辅助测试工具介绍
http://bbs.51testing.com/viewthread.php?tid=112628&highlight=%2B%C2%F4%C9%D5%BF%BE%B5%C4%D3%E3
[卖烧烤的鱼]的原创帖子集合
http://bbs.51testing.com/search.php?searchid=20&orderby=lastpost&ascdesc=desc&searchsubmit=yes
中国著名电子商务网站网址名单大全
http://bbs.51testing.com/thread-96330-1-1.html
三大C2C购物网站淘宝拍拍有啊之横向评测
http://bbs.51testing.com/thread-133268-1-1.html
行业网站的应该具备哪些技术指标?
http://bbs.51testing.com/thread-102457-1-2.html
[黑客攻击原理普及系列-阿七打造,必属精品]防范黑 客木马
http://bbs.51testing.com/thread-124374-1-3.html
[原创]测试工作技能
http://bbs.51testing.com/thread-118100-1-1.html
[转帖] 电子商务网站--界面测试的测试点
http://bbs.51testing.com/thread-112897-1-1.html
中小企业电子商务及其成本效益分析
http://bbs.51testing.com/thread-135227-1-1.html
登陆的秘密.
http://bbs.51testing.com/thread-133532-1-2.html
[原创-阿七打造,必属精品]关于URL欺骗所想到的
http://bbs.51testing.com/thread-124063-1-2.html
31个用来测试你网站各项性能的免费在线工具
http://bbs.51testing.com/thread-127934-1-2.html
电子商务套件的框架及理念
http://bbs.51testing.com/thread-98039-1-2.html
HTTP服务器状态代码定义
http://bbs.51testing.com/thread-126621-1-3.html
发布 Web 应用程序时避免瓶颈的实际负载测试技巧
http://bbs.51testing.com/thread-125398-1-3.html
转自:http://bbs.51testing.com/thread-138152-1-1.html
使用Microsoft Web Application Stress Tool对web进行压力测试
2010-03-30 12:19:11
随着服务器端处理任务的日益复杂以及网站访问量的迅速增长,服务器性能的优化也成了非常迫切的任务。在优化之前,最好能够测试一下不同条件下服务器的性能 表现。找出性能瓶颈所在是设计性能改善方案之前的一个至关紧要的步骤。
本文介绍微软Web压力测试工具(Microsoft Web Application Stress Tool 1.1)在Web服务器性能测试中的应用(注:Stress基本含义为“重压;压力”等,本文称之为“负载”)。另 外,我们还将通过WAS评估一种相对简单的网站性能改善方法,这种方法的基本思想是在服务器上生成静态的HTML页面、避免过多的数据库调用。
负载测试是任何Web应用的开发周期中一个重要的步骤。如果你在构造一个为大量用户服务的应用,搞清楚你的产品配置能够承受多大的负载非常重要。如果 你在构造一个小型的Intranet网站,测试能够暴露出最终会导致服务器崩溃的内存漏洞以及竞争情况。
无论是哪种情形,花些时间对应用进行负载测试可以获得重要的基准性能数据,为未来的代码优化、硬件配置以及系统软件升级带来方便。即使经费有限的开发组 织也可以对它们的网站进行负载测试,因为Microsoft的WAS是可以免费下载的。WAS要求Windows NT 4.0 SP4或者更高,或者Windows 2000。为了对网站进行负载测试,WAS可以通过一台或者多台客户机模拟大量用户的活动。WAS支持身份验证、加密和Cookies,也能够模拟各种浏 览器类型和Modem速度,它的功能和性能可以与数万美元的产品相媲美。如果你对WAS和Microsoft的另外一个测试工具Web Capacity Analysis Tool (WCAT)之间的差别感兴趣,可以访问Microsoft Web工具的比较页面。
WAS能够为你提供有关ASP应用和它所运行的硬件的丰富的信息。在WAS上花费一些时间,你就能够更深入地了解你的应用的性能、稳定性、瓶颈和局限性。花费这种时间是值得的。
Microsoft Developer Network
使用WAS的好处
WAS的缺陷
安装WAS
创建测试脚本
配置测试脚本
运行测试脚本
结论:最好的习惯
对于需要安全连接的站点,WAS支持SSL页面。然而不允许SSL的记录。要解决这些限制,你可以在服务器端关掉SSL,记录脚本,然后再重新激活 服务器上的SSL。
(sockets per thread) = Total Number Sockets
web check 链接和使用
2010-03-24 10:56:05
使用本地址检查web w3c检查有页面、CSS等检查
很多都需要测试人员自己去判断,报错信息分析。
其实对于404页面跳转我也自己想了一些方法。
第一种解决办法就是什么也不做,系统会自动导向自定义404页面,这样只需再custom一个404页面就可以了,以后其他类似这样的页面问题也可以同时解决了。
第二种办法是在WordPress后台添加一个页面page,然后将这个页面的别名设置成archives,最好可以再这个页面上放上任何你想放的内容。
第三种办法是给这个页面做个301永久重定向,转向首页。
B2C电子商务网站用户UE和用户UI测试重点
2010-03-16 10:07:32
三个页面:
一.首页:首页的重要性毋庸质疑,首页的好坏很大程度上决定了新访客的去留。首页的设计有很多不同的风格,不同的国家,不同的产品,其首页相差很大。页面的好坏也不能简单地由老大或者是设计师说了就算,而必须要结合其相应的WA数据来分析。
二.搜索结果页:搜索结果页面是电子商务网站中浏览量最大的页面,因此,这个页面的用户体验的好坏,搜索结果的准确性,将直接影响网站顾客的购买(转化率)。
三.产品页面:产品介绍页面将对客户的购买行为起到关键的作用,产品图片,文字说明,产品描述就相当于柜台服务员与产品说明书。
一个流程
B2C网站最重要的流程就是购物流程,包括几个重要功能:购物车、配送方式、支付方式、提交订单。这一流程的用户体验的重要性在于让客户能很容易的完成下单的过程。
在这里我并不想说这三个页面一个流程具体怎么做才算是好的用户体验,因为用户体验好不好,一切都需要由数据来说话,需要根据不同的行业与用户,不断地作改进,做A/B Testing来完成,这也是WA系统与网站分析人员的重要性之所在。
作为电子商务网站来说,良好的网站前台体验是跟产品体验与服务体验相结合的,很好的产品与服务如果放在一个很烂的网站上,或者是很好的网站卖很烂的产品与服务,都将影响客户的购买欲望。
我相信如果B2C网站能很好的把握这三个重要页面与一个流程,一定能将网站的用户体验做很好的提升。
还有网站用户体验是浏览者在浏览一个网站的过程中建立起来的一种纯主观的心理感受。因为它是纯主观的,就带有一定的不确定因素。个体差异也决定了每个用 户的真实体验是无法通过其他途径来完全模拟或再现的。但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计的实验来认识到。
我们在做B2C电子商务的过程中一直很注重网站的客户体验,但更多的是从专业的角度上去分析和实施网站的客户体验。消费者需要的客户体验究竟是什么呢?
信任和证明:网站给人以信任感意味着网站更可能使你目标市场的消费者转化成为你的用户,吸引高质量链接以及更可能在新闻中被提及。
社会证明:让更多顾客购买,有一个看似非常简单、却被很多网站忽略的因素:社会证明。人们往往会因为其它人都购买了某商品而认为这个商品值得购 买,因此网站上增加“ 热销商品”(Best Sellers) 或 “推荐商品”(Recommended Items),这为顾客节省了购买考虑的时间,同时,增加更多来自第三方的肯定性反馈,如顾客的反馈信息,奖励及赞誉,商品/服务评论,案例/成功故事等 等。这类可能做起来很繁琐,但效果非常好,是基本措施。
优惠多多:基于价格的促销办法主要有免运费、打折、现金回馈,赠小礼物等。
购买流程简单:不要让我注册,不要像查户口一样让我填写一大堆资料,你们又不是警察。填写简单资料就可以买到我想要的商品最好。
购物安全:安全是网民实施网上购物的最基本需求。尽量在消费者实施网上购买、结算、配送的全过程中都突出显示你们的行业及安全证明、承诺及保证。
网站苗条:不要给我看太多的内容,我只不过是想来买个商品。花里胡哨的页面只会让我晕头转向,太多的功能我用不上,也不想用。
没事别烦我:还没看清楚都有什么内容,迎宾小姐出现了(线客服弹出)我一跳,让我安静地会吧。
在当前网站信息爆炸冲击用户视界的互联网时代,用户体验需要的是最简单的,进入到网站就可以傻瓜式地到自己所需要的信息,这时我们要相信简单就 好,一是把服务或者产品信息以最为方便的方式呈现给用户,二是用户看到信息后可以迅速下订单,三是如果是实物,有详细的配送说明。
测试web报错info总结-续
2010-03-15 09:28:28
202 未执行命令,站点上的命令过多。
• 211 系统状态,或系统帮助答复。
• 212 目录状态。
• 213 文件状态。
• 214 帮助消息。
• 215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。
• 220 服务就绪,可以执行新用户的请求。
• 221 服务关闭控制连接。如果适当,请注销。
• 225 数据连接打开,没有进行中的传输。
• 226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。
• 227 进入被动模式
(h1,h2,h3,h4,p1,p2)。
• 230 用户已登录,继续进行。
• 250 请求的文件操作正确,已完成。
• 257 已创建“PATHNAME”。
3xx - 肯定的中间答复
该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。
•
331 用户名正确,需要密码。
• 332 需要登录帐户。
• 350 请求的文件操作正在等待进一步的信息。
4xx - 瞬态否定的完成答复
该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。
•
421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。
• 425 无法打开数据连接。
• 426 Connection closed; transfer aborted.
•
450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。
• 451 请求的操作异常终止:正在处理本地错误。
• 452 未执行请求的操作。系统存储空间不够。
5xx - 永久性否定的完成答复
该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。
•
500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
• 501 在参数中有语法错误。
• 502 未执行命令。
• 503 错误的命令序列。
• 504 未执行该参数的命令。
• 530 未登录。
• 532 存储文件需要帐户。
• 550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。
• 551 请求的操作异常终止:未知的页面类型。
• 552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。
• 553 未执行请求的操作。不允许的文件名。
常见的 FTP 状态代码及其原因
• 150 - FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。
• 226 - 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。
• 230 - 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。
• 331 - 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。
• 426 - 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。
• 530 - 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。
• 550 - 命令未被执行,因为指定的文件不可用。例如,要
GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。
网页经常报错..
该内存不能read 或written数值 叙述
0 0x0000 作业完成。
1 0x0001 不正确的函数。
2 0x0002 系统找不到指定的档案。
3 0x0003 系统找不到指定的路径。
4 0x0004 系统无法开启档案。
5 0x0005 拒绝存取。
6 0x0006 无效的代码。
7 0x0007 储存体控制区块已毁。
8 0x0008 储存体空间不足,无法处理这个指令。
9 0x0009 储存体控制区块位址无效。
10 0x000a 环境不正确。
11 0x000b 尝试载入一个格式错误的程式。
12 0x000c 存取码错误。
13 0x000d 资料错误。
14 0x000e 储存体空间不够,无法完成这项作业。
15 0x000f 系统找不到指定的磁碟机。
16 0x0010 无法移除目录。
17 0x0011 系统无法将档案移到 其他的磁碟机。
18 0x0012 没有任何档案。
19 0x0013 储存媒体为防写状态。
20 0x0014 系统找不到指定的装置。
21 0x0015 装置尚未就绪。
22 0x0016 装置无法识别指令。
23 0x0017 资料错误 (cyclic redundancy check)
24 0x0018 程式发出一个长 度错误的指令。
25 0x0019 磁碟机在磁碟找不到 持定的磁区或磁轨。
26 0x001a 指定的磁碟或磁片无法存取。
27 0x001b 磁碟机找不到要求的磁区。
28 0x001c 印表机没有纸。
29 0x001d 系统无法将资料写入指定的磁碟机。
30 0x001e 系统无法读取指定的装置。
31 0x001f 连接到系统的某个装置没有作用。
32 0x0020 the process cannot access the file because it is being used by
another process.
33 0x0021 档案的一部份被锁定, 现在无法存取。
34 0x0022 磁碟机的磁片不正确。 请将 %2 (volume serial number: %3) 插入磁碟机 %1。
36 0x0024 开启的分享档案数量太多。
38 0x0026 到达档案结尾。
39 0x0027 磁碟已满。
50 0x0032 不支援这种网路要求。
51 0x0033 远端电脑无法使用。
52 0x0034 网路名称重复。
53 0x0035 网路路径找不到。
54 0x0036 网路忙碌中。
55 0x0037 the specified network resource or device is no longer available.
56 0x0038 the network bios command limit has been reached.
57 0x0039 网路配接卡发生问题。
58 0x003a 指定的伺服器无法执行要求的作业。
59 0x003b 网路发生意外错误。
60 0x003c 远端配接卡不相容。
61 0x003d 印表机伫列已满。
62 0x003e 伺服器的空间无法储存等候列印的档案。
63 0x003f 等候列印的档案已经删除。
64 0x0040 指定的网路名称无法使用。
65 0x0041 拒绝存取网路。
66 0x0042 网路资源类型错误。
67 0x0043 网路名称找不到。
68 0x0044 超过区域电脑网路配接卡的名称限制。
69 0x0045 超过网路 bios 作业阶段的限制。
70 0x0046 远端伺服器已经暂停或者正在起始中。
71 0x0047 由于连线数目已达上限,此时无法再连线到这台远端电脑。
72 0x0048 指定的印表机或磁碟装置已经暂停作用。
80 0x0050 档案已经存在。
82 0x0052 无法建立目录或档案。
83 0x0053 int 24 失败
84 0x0054 处理这项要求的储存体无法使用。
85 0x0055 近端装置名称已经在使用中。
86 0x0056 指定的网路密码错误。
87 0x0057 参数错误。
88 0x0058 网路发生资料写入错误。
89 0x0059 此时系统无法执行其他行程。
100 0x0064 无法建立其他的系统 semaphore。
101 0x0065 属于其他行程专用的 semaphore 。
102 0x0066 semaphore 已经设定,而且无法关闭。
103 0x0067 无法指定 semaphore 。
104 0x0068 在岔断时间无法要求专用的 semaphore 。
105 0x0069 此 semaphore 先前的拥有权已经结束。
106 0x006a 请将磁片插入 %1。
107 0x006b 因为代用的磁片尚未插入,所以程式已经停止。
108 0x006c 磁碟正在使用中或被锁定。
109 0x006d pipe 已经中止。
110 0x006e 系统无法开启指定的 装置或档案。
111 0x006f 档名太长。
112 0x0070 磁碟空间不足。
113 0x0071 没有可用的内部档案识别字。
114 0x0072 目标内部档案识别字不正确。
117 0x0075 由应用程式所执行的 ioctl 呼叫 不正确。
118 0x0076 写入验证参数值不正确。
119 0x0077 系统不支援所要求的指令。
120 0x0078 此项功能仅在 win32 模式有效。
121 0x0079 semaphore 超过逾时期间。
122 0x007a 传到系统呼叫的资料区域 太小。
123 0x007b 档名、目录名称或储存体标签语法错误。
124 0x007c 系统呼叫层次不正确。
125 0x007d 磁碟没有设定标签。
126 0x007e 找不到指定的模组。
127 0x007f 找不到指定的程序。
128 0x0080 没有子行程可供等待。
129 0x0081 %1 这个应用程式无法在 win32 模式下执行。
130 0x0082 attempt to use a file handle to an open disk partition for an
operation other than raw disk i/o.
131 0x0083 尝试将档案指标移至档案开头之前。
132 0x0084 无法在指定的装置或档案,设定档案指标。
133 0x0085 join 或 subst 指令 无法用于 内含事先结合过的磁碟机。
134 0x0086 尝试在已经结合的磁碟机,使用 join 或 subst 指令。
135 0x0087 尝试在已经替换的磁碟机,使 用 join 或 subst 指令。
136 0x0088 系统尝试删除 未连结过的磁碟机的连结关系。
137 0x0089 系统尝试删除 未替换过的磁碟机的替换关系。
138 0x008a 系统尝试将磁碟机结合到已经结合过之磁碟机的目录。
139 0x008b 系统尝试将磁碟机替换成已经替换过之磁碟机的目录。
140 0x008c 系统尝试将磁碟机替换成已经替换过之磁碟机的目录。
141 0x008d 系统尝试将磁碟机 subst 成已结合的磁碟机 目录。
142 0x008e 系统此刻无法执行 join 或
subst。
143 0x008f 系统无法将磁碟机结合或替换同一磁碟机下目录。
144 0x0090 这个目录不是根目录的子目录。
145 0x0091 目录仍有资料。
146 0x0092 指定的路径已经被替换过。
147 0x0093 资源不足,无法处理这项 指令。
148 0x0094 指定的路径这时候无法使用。
149 0x0095 尝试要结合或替换的磁碟机目录,是已经替换过的的目标。
150 0x0096 config.sys 档未指定系统追踪资讯,或是追踪功能被取消。
151 0x0097 指定的 semaphore事件
dosmuxsemwait 数目不正确。
152 0x0098 dosmuxsemwait 没有执行;设定太多的 semaphore。
153 0x0099 dosmuxsemwait 清单不正确。
154 0x009a 您所输入的储存媒体标 元长度限制。
155 0x009b 无法建立其他的执行绪。
156 0x009c 接收行程拒绝接受信号。
157 0x009d 区段已经被舍弃,无法被锁定。
158 0x009e 区段已经解除锁定。
159 0x009f 执行绪识别码的位址不正确。
160 0x00a0 传到 dosexecpgm 的引数字串不正确。
161 0x00a1 指定的路径不正确。
162 0x00a2 信号等候处理。
164 0x00a4 系统无法建立执行绪。
167 0x00a7 无法锁定档案的部份范围。
170 0x00aa 所要求的资源正在使用中。
173 0x00ad 取消范围的锁定要求不明显。
174 0x00ae 档案系统不支援自动变更锁定类型。
180 0x00b4 系统发现不正确的区段号码。
182 0x00b6 作业系统无法执行 %1。
183 0x00b7 档案已存在,无法建立同一档案。
186 0x00ba 传送的旗号错误。
187 0x00bb 指定的系统旗号找不到。
188 0x00bc 作业系统无法执行 %1。
189 0x00bd 作业系统无法执行 %1。
190 0x00be 作业系统无法执行 %1。
191 0x00bf 无法在 win32 模式下执行 %1。
192 0x00c0 作业系统无法执行 %1。
193 0x00c1 %1 不是正确的 win32 应用程式。
194 0x00c2 作业系统无法执行 %1。
195 0x00c3 作业系统无法执行 %1。
196 0x00c4 作业系统无法执行 这个应用程式。
197 0x00c5 作业系统目前无法执行 这个应用程式。
198 0x00c6 作业系统无法执行 %1。
199 0x00c7 作业系统无法执行 这个应用程式。
200 0x00c8 程式码的区段不可以大于或等于 64kb。
201 0x00c9 作业系统无法执行 %1。
202 0x00ca 作业系统无法执行 %1。
203 0x00cb 系统找不到输入的环境选项。 \r
205 0x00cd 在指令子目录下,没有任何行程有信号副处理程式。
206 0x00ce 档案名称或副档名太长。
207 0x00cf ring 2 堆叠使用中。
使 用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的 0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳 定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。
内 存不能为read的问题是一个非常复杂的问题,造成的原因是多方面的,有硬件的原因,也有软件的原因,一时半会儿很难搞的清楚。就是对那些整天玩电脑的老
手来说也是一个非常辣手的问题。就我个人的理解,大多与使用非原版的系统而产生的不稳定性有关,轻易很难修复。所以我一般的主张是,只要不是频繁出现,可 以不必管它,点一下“确定”或者“取消”就可以了。如果真有兴趣想研究一下的话,你可以试着从一下方面寻找原因:
1. 内存条坏了或与主板不兼容 更换内存条
2. 双内存不兼容 使用同品牌的内存或只要一条内存
3. 内存质量问题 更换内存条
4. 散热问题 加强机箱内部的散热
5. 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽
6. 硬盘有问题 更换硬盘
7. 驱动问题 重装驱动,如果是新系统,应先安装主板驱动
8. 软件损坏 重装软件
9. 软件有BUG 打补丁或更新到最新版本
10 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式
11 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试
12 软件要使用其他相关的软件有问题 重装相关软件,比如播放某一格式的文件时出错,可能是这个文件的解码器有问题
13 病毒问题 杀毒
14 杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试
15 系统本身有问题 有时候操作系统本身也会有BUG,要注意安装官方发行的更新程序,象SP的补丁,最好打上
—— 最后我再强调一下,不是所有的电脑问题我们普通人都能搞得清摸得透的,以上的方法即使都已试过,谁也不能保证一定能够解决你的问题,因为电脑的问题的确很
复杂,“不能为read”这仅仅是一个症状,单凭这一个小小的症状是很难一下子找到问题所在的。我们都希望当说明了问题之后能够马上得到满意的回答,有时
候是不可能的,必须慢慢的摸索才能知道问题所在。如果想省心的话,也许只有最后这两点建议最有用:一是不管它(反正也没有大碍),二是重装一个稳定的系 统。说到系统,这也是我要说的重点,实际上我们的电脑之所以出现“内存不能为read的问题”,大多都与安装了Ghost系统有关,“内存不能为 read”现象可以说是Ghost系统的一个不可修复的通病。所以我建议你用原版系统盘重装系统。关于什么是Ghost系统,我在这里也解释一下(好多现 在正在使用Ghost系统的人都不知道自己的系统是Ghost系统),所谓Ghost系统,就是指像那些番茄花园、电脑公司版、雨林木风、萝卜家园等改版
本的XP系统,即非原版的系统。你可以通过点“我的电脑”右键-属性来查看你的系统属性。
下面有两种处理方法可以试试:【如果不行只有恢复或重装系统了】
(1)试用命令排除
开始-运行- 输入cmd-- 回车,在命令提示符下输入下面命令
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
怕输入错误,可以复制这条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。
(2) 运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
下,应该只有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 将其他的删除。
测试web报错info总结
2010-03-15 09:09:48
HTTP 400 - 请求无效
HTTP 401.1 - 未授权:登录失败
HTTP 401.2 - 未授权:服务器配置问题导致登录失败
HTTP 401.3 - ACL 禁止访问资源
HTTP 401.4 - 未授权:授权被筛选器拒绝
HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
HTTP 403 - 禁止访问
HTTP 403 - 对 Internet 服务管理器 的访问仅限于 Localhost
HTTP 403.1 禁止访问:禁止可执行访问
HTTP 403.2 - 禁止访问:禁止读访问
HTTP 403.3 - 禁止访问:禁止写访问
HTTP 403.4 - 禁止访问:要求 SSL
HTTP 403.5 - 禁止访问:要求 SSL 128
HTTP 403.6 - 禁止访问:IP 地址被拒绝
HTTP 403.7 - 禁止访问:要求客户证书
HTTP 403.8 - 禁止访问:禁止站点访问
HTTP 403.9 - 禁止访问:连接的用户过多
HTTP 403.10 - 禁止访问:配置无效
HTTP 403.11 - 禁止访问:密码更改
HTTP 403.12 - 禁止访问:映射器拒绝访问
HTTP 403.13 - 禁止访问:客户证书已被吊销
HTTP 403.15 - 禁止访问:客户访问许可过多
HTTP 403.16 - 禁止访问:客户证书不可信或者无效
HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效 HTTP 404.1 -
无法找到 Web 站点
HTTP 404- 无法找到文件
HTTP 405 - 资源被禁止
HTTP 406 - 无法接受
HTTP 407 - 要求代理身份验证
HTTP 410 - 永远不可用
HTTP 412 - 先决条件失败
HTTP 414 - 请求 - URI 太长
HTTP 500 - 内部服务器错误
HTTP 500.100 - 内部服务器错误 - ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 - 服务器太忙
HTTP 500-14 - 应用程序无效
HTTP 500-15 - 不允许请求 global.asa
Error 501 - 未实现
HTTP 502 - 网关错误
用户试图通过 HTTP 或文件传输协议 (FTP) 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。该状态代码记录在 IIS 日志中,同时也可能在 Web 浏览器或 FTP 客户端显示。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。
日志文件的位置
在默认状态 下,IIS 把它的日志文件放在
%WINDIRSystem32Logfiles 文件夹中。每个万维网 (WWW) 站点和 FTP 站点在该目录下都有一个单独的目录。在默认状态下,每天都会在这些目录下创建日志文件,并用日期给日志文件命名(例如,exYYMMDD.log)。
HTTP
1xx - 信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。 • 100 - 继续。
• 101 - 切换协议。
2xx - 成功
这类状态代码表明服务器成功地接受了客户端请求。
•
200 - 确定。客户端请求已成功。
• 201 - 已创建。
• 202 - 已接受。
• 203 - 非权威性信息。
• 204 - 无内容。
• 205 - 重置内容。
• 206 - 部分内容。
3xx - 重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
•
302 - 对象已移动。
• 304 - 未修改。
• 307 - 临时重定向。
4xx - 客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
•
400 - 错误的请求。
• 401 - 访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在
IIS 日志中显示: • 401.1 - 登录失败。
• 401.2 - 服务器配置导致登录失败。
• 401.3 - 由于 ACL 对资源的限制而未获得授权。
• 401.4 - 筛选器授权失败。
• 401.5 - ISAPI/CGI 应用程序授权失败。
• 401.7 – 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
•
403 - 禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:
•
403.1 - 执行访问被禁止。
• 403.2 - 读访问被禁止。
• 403.3 - 写访问被禁止。
• 403.4 - 要求 SSL。
• 403.5 - 要求 SSL 128。
• 403.6 - IP 地址被拒绝。
• 403.7 - 要求客户端证书。
• 403.8 - 站点访问被拒绝。
• 403.9 - 用户数过多。
• 403.10 - 配置无效。
• 403.11 - 密码更改。
• 403.12 - 拒绝访问映射表。
• 403.13 - 客户端证书被吊销。
• 403.14 - 拒绝目录列表。
• 403.15 - 超出客户端访问许可。
• 403.16 - 客户端证书不受信任或无效。
• 403.17 - 客户端证书已过期或尚未生效。
• 403.18 - 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
• 403.19 - 不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
• 403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
•
404 - 未找到。 • 404.0 -(无) – 没有找到文件或目录。
• 404.1 - 无法在所请求的端口上访问 Web 站点。
• 404.2 - Web 服务扩展锁定策略阻止本请求。
• 404.3 - MIME 映射策略阻止本请求。
•
405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许)
• 406 - 客户端浏览器不接受所请求页面的 MIME 类型。
• 407 - 要求进行代理身份验证。
• 412 - 前提条件失败。
• 413 – 请求实体太大。
• 414 - 请求 URI 太长。
• 415 – 不支持的媒体类型。
• 416 – 所请求的范围无法满足。
• 417 – 执行失败。
• 423 – 锁定的错误。
5xx - 服务器错误
服务器由于遇到错误而不能完成该请求。
•
500 - 内部服务器错误。 • 500.12 - 应用程序正忙于在 Web 服务器上重新启动。
• 500.13 - Web 服务器太忙。
• 500.15 - 不允许直接请求 Global.asa。
• 500.16 – UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
• 500.18 – URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
• 500.100 - 内部 ASP 错误。
•
501 - 页眉值指定了未实现的配置。
• 502 - Web 服务器用作网关或代理服务器时收到了无效响应。
•
502.1 - CGI 应用程序超时。
• 502.2 - CGI 应用程序出错。application.
•
503 - 服务不可用。这个错误代码为 IIS 6.0 所专用。
• 504 - 网关超时。
• 505 - HTTP 版本不受支持。
常见的 HTTP 状态代码及其原因
• 200 - 成功。 此状态代码表示 IIS 已成功处理请求。
• 304 - 未修改。客户端请求的文档已在其缓存中,文档自缓存以来尚未被修改过。客户端使用文档的缓存副本,而不从服务器下载文档。
• 401.1 - 登录失败。 登录尝试不成功,可能因为用户名或密码无效。
• 401.3 - 由于 ACL 对资源的限制而未获得授权。
这表示存在 NTFS 权限问题。即使您对试图访问的文件具备相应的权限,也可能发生此错误。例如,如果 IUSR 帐户无权访问 C:WinntSystem32Inetsrv 目录,您会看到这个错误。
有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
187506 INFO: IIS 4.0 的基础 NTFS 权限
• 403.1 - 执行访问被禁止。 下面是导致此错误信息的两个常见原因: • 您没有足够的执行许可。例如,如果试图访问的 ASP 页所在的目录权限设为“无”,或者,试图执行的 CGI 脚本所在的目录权限为“只允许脚本”,将出现此错误信息。若要修改执行权限,请在 Microsoft 管理控制台 (MMC) 中右击目录,然后依次单击属性和目录选项卡,确保为试图访问的内容设置适当的执行权限。
• 您没有将试图执行的文件类型的脚本映射设置为识别所使用的谓词(例如,GET 或 POST)。若要验证这一点,请在 MMC 中右击目录,依次单击属性、目录选项卡和配置,然后验证相应文件类型的脚本映射是否设置为允许所使用的谓词。
•
403.2 - 读访问被禁止。验证是否已将 IIS 设置为允许对目录进行读访问。另外,如果您正在使用默认文件,请验证该文件是否存在。有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
247677 错误信息:403.2 Forbidden:Read Access Forbidden(403.2 禁止访问:读访问被禁止)
• 403.3 - 写访问被禁止。 验证 IIS 权限和 NTFS 权限是否已设置以便向该目录授予写访问权。有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
248072 错误信息:403.3 Forbidden:Write Access Forbidden(403.3 禁止访问:写访问被禁止)
• 403.4 - 要求 SSL。禁用要求安全通道选项,或使用 HTTPS 代替 HTTP 来访问该页面。如果没有安装证书的 Web 站点出现此错误,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
224389 错误信息:HTTP 错误 403、403.4、403.5 禁止访问:要求
SSL
• 403.5 - 要求 SSL 128。禁用要求 128 位加密选项,或使用支持 128 位加密的浏览器以查看该页面。如果没有安装证书的 Web 站点出现此错误,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
224389 错误信息:HTTP 错误 403、403.4、403.5 禁止访问:要求
SSL
• 403.6 - IP 地址被拒绝。您已把您的服务器配置为拒绝访问您目前的 IP 地址。有关如何解决此问题的其他信息,请单击下面的文章编号,查看
Microsoft 知识库中相应的文章:
248043 错误信息:403.6 - Forbidden:IP Address Rejected(403.6 - 不可用:IP 地址被拒绝)
• 403.7 - 要求客户端证书。您已把您的服务器配置为要求客户端身份验证证书,但您未安装有效的客户端证书。有关其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
190004 错误 403.7 或“Connection to
Server Could Not Be Established”(无法建立与服务器的连接)
186812 PRB:错误信息:403.7 Forbidden:Client Certificate Required(403.7 禁止访问:要求客户端证书)
• 403.8 - 站点访问被拒绝。您已为您用来访问服务器的域设置了域名限制。有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
248032 错误信息:Forbidden:Site Access Denied 403.8(禁止访问:站点访问被拒绝 403.8)
• 403.9 - 用户数过多。与该服务器连接的用户数量超过了您设置的连接限制。有关如何更改此限制的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
248074 错误信息:Access Forbidden:Too Many Users Are
Connected 403.9(禁止访问:连接的用户太多 403.9)
注意:Microsoft Windows 2000 Professional 和 Microsoft Windows XP Professional 自动设置了在
IIS 上最多 10 个连接的限制。您无法更改此限制。
• 403.12 - 拒绝访问映射表。 您要访问的页面要求提供客户端证书,但映射到您的客户端证书的用户 ID 已被拒绝访问该文件。有关其他信息,请单击下面的文章编号,以查看
Microsoft 知识库中相应的文章:
248075 错误信息:HTTP 403.12 - Access Forbidden:Mapper
Denied Access(HTTP 403.12 - 禁止访问:映射表拒绝访问)
• 404 - 未找到。 发生此错误的原因是您试图访问的文件已被移走或删除。如果在安装 URLScan 工具之后,试图访问带有有限扩展名的文件,也会发生此错误。这种情况下,该请求的日志文件项中将出现“Rejected by URLScan”的字样。
• 500 - 内部服务器错误。 很多服务器端的错误都可能导致该错误信息。事件查看器日志包含更详细的错误原因。此外,您可以禁用友好 HTTP 错误信息以便收到详细的错误说明。 有关如何禁用友好 HTTP 错误信息的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
294807 如何在服务器端禁用 Internet Explorer 5 的“显示友好 HTTP 错误信息”功能
• 500.12 - 应用程序正在重新启动。 这表示您在 IIS 重新启动应用程序的过程中试图加载 ASP 页。刷新页面后,此信息即会消失。如果刷新页面后,此信息再次出现,可能是防病毒软件正在扫描 Global.asa 文件。有关其他信息,请单击下面的文章编号,以查看
Microsoft 知识库中相应的文章:
248013 错误信息:HTTP Error 500-12 Application Restarting(HTTP 错误 500-12 应用程序正在重新启动)
• 500-100.ASP - ASP 错误。
如果试图加载的 ASP 页中含有错误代码,将出现此错误信息。若要获得更确切的错误信息,请禁用友好 HTTP 错误信息。默认情况下,只会在默认 Web 站点上启用此错误信息。有关如何在非默认的 Web 站点上看到此错误信息的其他信息,请单击下面的文章编号,以查看
Microsoft 知识库中相应的文章:
261200 显示 HTTP 500 错误信息,而不显示
500-100.asp 的 ASP 错误信息
• 502 - 网关错误。 如果试图运行的 CGI 脚本不返回有效的 HTTP 标头集,将出现此错误信息。
FTP
1xx - 肯定的初步答复
这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。
•
110 重新启动标记答复。
• 120 服务已就绪,在 nnn 分钟后开始。
• 125 数据连接已打开,正在开始传输。
• 150 文件状态正常,准备打开数据连接。
2xx - 肯定的完成答复
一项操作已经成功完成。客户端可以执行新命令。
•
200 命令确定。
•
QC10.0 安装总结和遇到所有问题解总结
2010-03-08 14:12:32
输入QC的全名,然后注册个马甲,就可以下载qc10了,注册文件是
<?xml version="1.0" encoding="UTF-8"?>
<license version="1.0">
<terms>
<issued_to>Trinok (http://forum.ru-board.com/)</issued_to>
<license_identifier>SN732563653</license_identifier>
<edition>premier</edition>
<tolerance>0</tolerance>
<components>
<component name="vc_enabled" quota="-1" />
<component name="testlab" quota="-1" />
<component name="management" quota="-1" />
<component name="defects" quota="-1" />
<component name="dashboard" quota="-1" />
<component name="requirements" quota="-1" />
<component name="advanced_reports" quota="-1" />
<component name="components" quota="-1" />
</components>
</terms>
<signature>Y/Ky0VJFMgAliCBuSSHyl6c5wuC2ROak3WVYrSa+zfr/3ei6u3xX0VRBvsauGO4KVn6ZEQRWvsTBOoDBHA2WnQ==</signature>
</license>
保存成qc10.0_license.license load这个文件就okay
再多给几个可以使用
<?xml version="1.0" encoding="UTF-8"?>
<license version="1.0">
<terms>
<issued_to>Trinok (http://forum.ru-board.com/)</issued_to>
<license_identifier>SN732563653</license_identifier>
<edition>enterprise</edition>
<tolerance>0</tolerance>
<components>
<component name="testlab" quota="-1" />
<component name="dashboard" quota="-1" />
<component name="vc_enabled" quota="-1" />
<component name="defects" quota="-1" />
<component name="advanced_reports" quota="-1" />
<component name="components" quota="-1" />
<component name="requirements" quota="-1" />
<component name="management" quota="-1" />
</components>
</terms>
<signature>m/1xY/Su/UoMz97O6+3mBP6P74KgApT08bi5DYi1rjJKkobHnRteZXhZmRs/woacF7vFgn05IXSO4RSf5dnExQ==</signature>
</license>
<?xml version="1.0" encoding="UTF-8"?>
<license version="1.0">
<terms>
<issued_to>Trinok (http://forum.ru-board.com/)</issued_to>
<license_identifier>SN732563653</license_identifier>
<edition>starter</edition>
<tolerance>0</tolerance>
<components>
<component name="vc_enabled" quota="-1" />
<component name="testlab" quota="-1" />
<component name="management" quota="-1" />
<component name="defects" quota="-1" />
<component name="dashboard" quota="-1" />
<component name="requirements" quota="-1" />
<component name="advanced_reports" quota="-1" />
<component name="components" quota="-1" />
</components>
</terms>
<signature>QCAV5SBqrlA1aVRmXAQNFUkG2vxyj5buX7wdbWH5ECtYW6ctNAsVswotCnBfAuC8eQSIQoDyDrgd2NXoy4DYXA==</signature>
</license>
之后运行你就会发现很多问题
第一,
先解决插件问题,把三个qc插件安装完
第二解决test_type.cab问题,你可以使用QC Explorer,但是不能要求每个开发和测试人员去add这个插件
插件下载http://www.genilogix.com/downloads/qualitycenter/qc-patches/10.0/
这个链接很不错,下载对应操作系统补丁,我使用QC10_Patch10_Windows.zip
第三解决IE访问问题
1. 在服务端QC的安装目录下jboss\server\default\deploy目录下找到20qcbin.war这个war包。
2. 用winrar打开这个目录,可以看到start_a.htm这个文件。
3. 把start_a.htm这个文件copy出来修改添加|| (ua.lastIndexOf(’MSIE 7.0′) != -1)|| (ua.lastIndexOf(’MSIE 8.0′) != -1)后替换 war包中的start_a.htm文件。这里也可以直接在原文件修改。
修改配置成功后,下次重启QC服务也不会有问题。原因是重启服务器的过程中会把20qcbin.war中的内容解压出来到临时目录下的。
这里注意:改完上面的配置如果不想重启服务器,就需要把temp中的start_a.htm这个文件也增加ie7,ie8的支持。只改系统文件是需要重启QC服务的~
error at login to QC 10 - test_type.cab
http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=1391650
jsp连接数据库大全(java)
2010-02-11 11:10:12
create table test(test1 varchar(20),test2 varchar(20)
然后向这个表写入一条测试纪录
那么现在开始我们的jsp和数据库之旅吧。
一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二、jsp连接Sql Server7.0/2000数据库
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三、jsp连接DB2数据库
testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四、jsp连接Informix数据库
testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五、jsp连接Sybase数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url ="jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
六、jsp连接MySQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
七、jsp连接PostgreSQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//soft为你的数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
jrockit 6.0 介绍和使用
2010-01-26 11:31:40
http://commerce.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/products/all_products.jsp
下载url为:
MessageQ:
http://download2.bea.com/pub/license/All Products/MessageQ.zip
BEA Tuxedo Products:
http://download2.bea.com/pub/license/All Products/BEA_Tuxedo_Products.zip
BEA WebLogic:
http://download2.bea.com/pub/license/All Products/BEA_WebLogic.zip
BEA AquaLogic:
http://download2.bea.com/pub/license/All Products/BEA_AquaLogic.zip
BEA WebLogic Communications Platform:
http://download2.bea.com/pub/license/All Products/BEA_WebLogic_Communication_Platform.zip
BEA Workshop:
http://download2.bea.com/pub/license/All Products/BEA_Workshop.zip
Blended Open Source Resources:
http://download2.bea.com/pub/license/All Products/Blended_Open_Source_Resources.zip
BEA JRockit:
http://download2.bea.com/pub/license/All Products/BEA_JRockit.zip
其它产品的:
http://download2.bea.com/pub/license/All Products/Other_Products.zip
新的bea jrockit 6.0 下载入口为:
http://commerce.bea.com/products/weblogicjrockit/jrockit_prod_fam-bea.jsp
http://dev2dev.bea.com.cn/techdoc/2007/07/java-soa-BEA-JRockit.html
http://commerce.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/products/weblogicjrockit/accept_terms60-bea.jsp
虽然JRockit Mission Control 2.0已经包含在BEA JRockit R27.1以上版本的JDK里面了,即安装后就有了。但是,为了使用它,你还需要下载一个适合与你的许可。BEA提供两种类型许可:免费的有限制的开发者 许可和收费的无限制的企业许可。许可下载地址为 http://dev2dev.bea.com/jrockit/tools.html
对应Jrockit安装程序为:
http://download2.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/pub/jrockit/60/jrockit-R27.5.0-jdk1.6.0_03-windows-x64.exe
http://download2.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/pub/jrockit/60/jrockit-R27.5.0-jdk1.6.0_03-windows-ia32.exe
http://download2.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/pub/jrockit/60/jrockit-R27.5.0-jdk1.6.0_03-linux-ia32.bin
http://download2.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/pub/jrockit/60/jrockit-R27.5.0-jdk1.6.0_03-linux-x64.bin
http://download2.--escaped_anchor:2293621d93a909cfd046ff6713918d6c--.com/pub/jrockit/60/jrockit-R27.5.0-jdk1.6.0_03-solaris-sparcv9.bin
简介
JRockit JVM不只是快,它还和JRockit Mission
Control一起,组成一套执行运行时分析和内存泄漏检测的分析工具,JRockit Management Console包含在JRockit
JDK中。本文将探讨JRockit Management
Console的一种试验性的headless模式,它可以用于与来自命令行的基于JRockitJMX的管理代理进行交互。Ctrl-Break
Handler提供了一种向JRockit发送各种高级命令的方法,甚至是在它启动后。这些命令甚至可以远程调用,我在后文中会提及。最后,我探讨了试验
性的code coverage,JRockit开箱即用地提供了该特性。
关于BEA JRockit的更多信息,参见dev2dev网站的JRockit Product Center。
首先我将快速概述一下JRockit JVM可用的已确定的管理工具,然后我会转向缺少文档的试验性管理特性。
JRockit Mission Control
JRockit R26.0.0版本引入了JRockit Mission
Control工具套件,它包含的工具可以进行监控、管理、分析和消除Java应用程序内存泄漏,而不会引起通常与此类工具相关联的性能开销。
Mission
Control的低性能开销是因为使用了作为JRockit常规适应性动态调优的一部分而收集的数据,这还可以消除工具使用字节码装置修改系统执行特性时
发生Heisenberg异常的问题。JRockit Mission
Control功能可以根据需要随时可用,低性能开销也只在运行工具时有效。这些特征使得JRockit Mission
Control成为专门用于生产中系统的工具。
JRockit Mission Control中包含以下工具:
- JRockit Management Console
JRockit Management Console用于监控和管理多个JRockit实例。它捕获并显示关于垃圾收集器(GC)暂停、内存和CPU使用的实时数据,以及部署在JVM内部 MBean服务器上的所有JMX MBean的信息。JVM管理包括对CPU相似性、垃圾收集策略和内存池大小的动态控制。 - JRockit Runtime Analyzer
JRockit Runtime Analyzer(JRA)是一个随需应变的“动态记录器”,它生成关于JVM和正在运行的应用程序的详细记录。然后可以使用JRA应用程序对记录下来的 配置文件进行离线分析。所记录的数据包括对方法和锁定的分析,还有垃圾收集统计信息,优化决策以及对象统计信息。 - JRockit Memory Leak Detector
JRockit Memory Leak Detector工具用来发现和查找内存泄漏原因。Memory Leak Detector的趋势分析器可以发现非常缓慢的泄漏,显示详细的堆统计信息(包括指向泄漏对象和分配位置的引用类型和实例),并快速找出泄漏原因。 Memory Leak Detector使用先进的图形化表现技术,以便更容易定位和理解有时比较复杂的信息。
关于JRockit Mission Control的更多信息,可以阅读文章An Introduction to JRockit Mission Control,或者访问dev2dev网站的JRockit Mission Control。
JRockit Management Console的Headless模式(试验性)
JRockit Management Console是监控JRockit运行的工具。它包括两部分:一个运行在JVM进程中的JMX代理,一个使用图形化用户界面的独立客户端(关于它以及其 它方面的更详细的信息,请参见An Introduction to JRockit Mission Control)。其中,用户界面可以绘出部署在所连接的Java虚拟机中的任何MBean的数值属性的图形。图形密集的应用程序对资源的消耗可能会相当 厉害,JRockit Management Console也不例外。可以引入text-only(纯文本)模式,以便使用Management Console的通知功能和数据收集工具而不会导致整个GUI的开销。
headless控制台引入了大量新的命令行参数。这同样适用于控制台的GUI版本。参数包括:
参数 | 描述 |
---|---|
-headless | 以headless模式启动控制台(不会加载与GUI相关的类)。 |
-settings <settings file> | 使用指定配置文件启动。如果以GUI模式启动,并且该文件不存在,那么它将在关闭Management Console时创建。 |
-connectall | 连接配置文件中所有可用连接(即原先使用GUI添加的)。 |
-connect <connection 1> <connection 2> <...> | 使用GUI连接配置文件中可用的指定连接。 |
-autoconnect | 自动连接到运行在启用JRockit发现协议(JRockit Discovery Protocol,JDP)的管理服务器上的任何JRockit。 |
-uptime <time in seconds> | 将控制台运行一段指定的时间,然后自动关闭它。 |
-useraction <name> <delay in seconds> <period (optional)> | 经过指定的时延后运行指定的用户动作。如果不指定period,动作将只执行一次;如果指定,动作将每过<period>秒就执行一次。 |
-version | 打印Management Console的版本信息,并退出。 |
-locale <language> <country (optional)> | 使用特定的地区启动控制台,比如,-locale ja JP将以日语启动控制台(JRockit R27可用)。 |
这里给出一个以headless模式启动Management Console的例子,读取指定配置文件,尝试连接所有已指定的JRockit,使用JRockit发现协议(JDP,下文讨论)积极查找新的 JRockit。30秒后将以每分钟一次的间隔向所有连接的JRockit发送Ctrl-Break命令。一小时之后自动关闭。以前加入指定连接的所有通 知规则(不管是通过使用GUI还是通过直接编辑配置文件添加的)将生效。
java -jar ManagementConsole.jar -headless -settings C:\Headless\consolesettings.xml -connectall -autoconnect -uptime 3600 -useraction ctrlbreak 30 60
用户动作是可以与JRockit Management Console上的一组连接进行交互的插件类,同样使用控制台配置文件来存储配置数据。用户动作显示在JRockit控制台图形用户界面的Plugins 菜单下,headless模式中也可用。随控制台提供了两个默认用户动作:jrarecording用户动作,对连接的JRockit启动JRA记 录;ctrlbreak用户动作,向连接的JRockit发送Ctrl-Break命令(参见本文中关于Ctrl-Break Handler和JRockit运行时分析器的小节)。要指定特定用户动作的参数,可以使用GUI进行配置,也可以编辑Management Console配置文件,后者可以在<user.home>/ManagementConsole/ManagementConsole /consolesettings.<version>.xml文件中找到。
编写自己的用户动作很容易。首先创建一个AbstractUserAction的子类。该示例演示了如何创建一个从所有连接的JRockit获取线程堆栈转储的用户动作。
package com.example.useractions;import java.io.IOException;import java.util.List;import com.jrockit.console.rjmx.CommonRJMXNames;import com.jrockit.console.rjmx.RJMXConnectorModel;import com.jrockit.console.useractions.AbstractUserAction;/** * This is a simple user action, getting stackdumps from * the selected JRockits and printing them on stdout. * * @author Marcus Hirt */public class MyUserAction extends AbstractUserAction{ public void executeAction(Listconnections) { for (RJMXConnectorModel connection : connections) { if (connection.isConnected()) { try { System.out.println(CommonRJMXNames.getThreadMXBean(connection).getThreadStackDump()); } catch (IOException e) { e.printStackTrace(); } } } }}
接下来,需要在consolesettings.xml文件中配置部属描述符,以便用户动作对于控制台可用。可以在配置文件中发现 user_actions元素,它已经填充了一些user_action元素。示例动作的部署描述符应当以相同的样式输入。描述符看起来会是这样:
<user_action> <user_action_class>com.example.useractions.MyUserAction</user_action_class> <user_action_name>stackdump</user_action_name> <user_action_menu_name>Stack Dump on stdout</user_action_menu_name> <user_action_description>Gets a stack dump from the selected JRockit(s), and dumps it on stdout.</user_action_description></user_action>
这也使得用户动作在Plugins菜单下的用户界面中可见。
当控制台启动或退出时,如果有设置/状态需要从配置文件加载/保存,只需重写exportToXml()/importFromXml()方法,如示例中所示:
/** * @see com.jrockit.console.util.XmlEnabled * #exportToXml(org.w3c.dom.Element) */public void exportToXml(Element parentNode){ super.exportToXml(parentNode); XmlToolkit.setSetting(parentNode, MY_PROPERTY, m_myVal);}/** * @see com.jrockit.console.util.XmlEnabled * #initializeFromXml(org.w3c.dom.Element) */ public void initializeFromXml(Element parentNode) { super.initializeFromXml(parentNode); m_myVal = XmlToolkit.getSetting(parentNode, MY_PROPERTY, DEFAULT_MY_VALUE));}
注意,用户动作的名称是使用launcher启动参数时将引用的用户动作名称,菜单名是会在GUI菜单中显示的名称。更多的信息请参见user action docs和JLMEXT docs。注意,这只是一个试验性的功能,提供的文档还相当简单,编写定制的通知动作和约束的方式与此类似。更多信息请参见Management Console User Guide。
JRockit发现协议(JDP)
JDP(JRockit发现协议)是个简单且有效的协议,用于允许JRockit管理服务器向Management Console组播它的存在。下面的两个表分别列出了在服务器端和客户端控制JDP行为的系统属性。
管理服务器的JDP属性
系统属性 | 描述 | 默认值 |
---|---|---|
jrockit.managementserver.autodiscovery | 启用JRockit发现协议 | False |
jrockit.managementserver.discovery.period | 在两个ping之间需要等待多久(以毫秒为单位) | 5000 |
jrockit.managementserver.discovery.ttl | 活跃的跃点数 | 1 |
jrockit.managementserver.discovery.address | 所使用的组播地址 | 232.192.1.212 |
jrockit.managementserver.discovery.port | 所使用的组播端口 | 7095 |
Management Console的JDP属性
系统属性 | 描述 | 默认值 |
---|---|---|
com.jrockit.console.preferences.jdp.port | 用于JRockit发现协议的端口 | 7095 |
com.jrockit.console.preferences.jdp.address | 所使用的组播地址 | 232.192.1.212 |
这里给出了在服务器端启用JDP的情况下,启动JRockit需要最少参数的示例。
java -Xmanagement -Djrockit.managementserver.autodiscovery=true<your program>Ctrl-Break Handler
您是否曾经希望在JVM启动后可以使用一种轻松的方式与其交互?假如说您忘记添加-Xmanagement选项来启动管理服务器,或者您想改变运行系统 中GC的冗余级别。这些现在很容易通过重新配置Ctrl-Break Handler来完成,而且它不只是打印堆栈跟踪。
用法- 创建一个名为ctrlhandler.act的文件。
- 向ctrlhandler.act文件添加命令(参见下文命令列表)。
- 以“stop”结束文件,这是结束文件分析的保留命令。
- 按下ctrl-break,每一个命令都将以出现的顺序执行。
JRockit首先会在当前工作目录查找该文件。如果未找到,JRockit将在JVM目录中查找。如果仍然没有的话,JRockit将回退以生成一个 常规的线程堆栈转储。JRockit将在每次按下ctrl-break时读取act文件,因此用户可以在方便时重新配置该文件,而同时JRockit仍在 运行。
这里给出一个示例act文件,它首先打印时间戳,然后是用于启动JRockit的命令行,最后是一个线程堆栈转储。它还包括可以用于act文件的有用命令的列表:
# Example ctrlhandler.act filetimestampcommand_lineprint_threadsstop# set_filename filename=<file> [append=true]# Sets the file that all handlers following this command will# use for printing. You can have several set_filename commands# in a file. It takes two arguments: filename and an optional# append to specify if you want to append to the file # or overwrite it. Default is to overwrite the file. # timestamp# Prints a timestamp. # print_threads# The normal thread dump.# verbosity [args=<components>] [filename=<file>]# Changes the verbosity level normally specified with -Xverbose. # version# Prints JRockit version information. # command_line# Prints the command line used to start JRockit. # print_object_summary# Prints heap usage statistics (how much heap is used per class),# together with a delta on how much this has changed since# the last invocation of this ctrl-break handler.# print_memusage# Prints a memory usage report of how JRockit is using# the memory.# heap_diagnostics# Prints a detailed report of the heap, including ascii graphics # over the heap layout.# print_class_summary# Prints all loaded classes. # print_utf8pool# Print all UTF8 strings. # jrarecording [filename=<file>] [time=<time>] [nativesamples=true]# Starts a JRA recording.# run_optfile [filename=<file>]# See OptFile. # start_management_server# Starts the new JMX-based management agent. # kill_management_server# Stops the management agent. # start_rmp_server# Starts the old management server (actually the listening # socket that in turn starts servers whenever a connection# is established). # kill_rmp_server# Stops the old management server (actually shuts down the# listening socket). The only reason it isn't named # kill_rmp_server is that stop is a reserved keyword # that stops the parsing of the act file. ;) # help [ctrl-break handler]# Prints all available ctrl-break handlers if no argument # is specified, or help for the specified ctrl-break handler.# memleakserver [port=<port>]# Toggles the memleakserver. If it hasn't been started # it will be started. If it has already started, it will be# shut down. The default port is 7095.# verbose_referents action=[heap|full|nursery|start|stop]# Print verbose reference information.# Parameters:# action=[heap|full|nursery|start|stop]# heap - trigger a heap collection and output reference# information# full - trigger a full heap collection (clears softly # reached soft referents)# nursery - trigger a nursery collection (heap collection # if running without nursery)# start - start writing reference information to default# verbose stream# stop - stop writing reference information# print_exceptions # exceptions=[true|all|false] stacktraces=[true|all|false]# Enable printing of Java exceptions thrown in the VM.# Parameters:# exceptions - print exceptions# stacktraces - print exceptions with stacktraces# At least one of the parameters is required.# Values for the parameters can be "true|all|false"# true - print all exceptions # except java/util/EmptyStackException,# java/lang/ClassNotFoundException and # java/security/PrivilegedActionException# all - print all exceptions# false - don't print exceptions# To turn exception printing off completely you need to set# exceptions = false even if it was turned # on by stacktraces = true.JRCMD使用JRCMD实用工具是一种新的调用Ctrl-Break Handler的便捷方式,可在JRockit发行版的bin目录中找到它。用法jrcmd <PID> <command> <parameters>
JRCMD
使用JRCMD实用工具是一种新的调用Ctrl-Break Handler的便捷方式,可在JRockit发行版的bin目录中找到它。
- PID = 要在其中执行Ctrl-Break Handler的JRockit进程的进程ID。
- command = 要执行的Ctrl-Break Handler命令。
- parameters = Ctrl-Break Handler的参数。
如果不指定选项(或者只指定-P),那么将显示运行在本地机器上的所有JRockit的进程ID。如果PID设为0,那么命令将发送给在本地机器上运行的所有JRockit JVM。
要列出特定的JRockit中有哪些Ctrl-Break Handler可用,可以使用help命令:
jrcmd <PID> help要想获得某个具体的Ctrl-Break Handler的帮助信息,需要在help后添加Ctrl-Break Handler的名称,比如:
jrcmd 0 help kill_management_server也可以使用JRCMD列出指定进程的性能计数:
jrcmd <PID> -l远程调用Ctrl-Break Handler
可以使用JRockit Management Console来远程调用Ctrl-Break
Handler。存在一个对JRockitConsoleMBean的操作,称为runCtrlBreakHandlerWithResult。
JRockit Management Console可以从属性浏览器调用对MBean的操作。这里有关于如何调用Ctrl-Break
Handler的逐步描述。
- 连接到一个运行中的JRockit。
- 右击该连接,选择Browse Attributes。
- 展开com.jrockit domain文件夹,选择JRockitConsole MBean。
- 单击operations选项卡,查看可用操作。
- 单击String parameter参数按钮,找到runCtrlBreakHandlerWithResult操作。
- 输入希望执行的Ctrl-Break Handler名称。语法与ctrlhandler.act文件相同。按下OK。
- 按下Execute按钮,执行操作。
试着输入“help”作为参数,将会列出所有可用的Ctrl-Break Handler,如图1所示。
图1.从JRockit Management Console调用Ctrl-Break Handler(单击图片查看大图)
堆视图(试验性)
当分析应用程序如何使用某种垃圾收集策略时,在每一次GC后对堆进行快照将会非常有帮助。这有助于开发人员研究数据,比如碎片/压缩以及算法通常如何执
行。但是快照中包含如此多的数据量以至于查看它没有什么意义,因此JRockit团队开发了一个提供图形化表示的小工具,以便更好地进行说明。
图2显示了一个快照的例子(使用的是一个非常早的JRockit 1.4.2预发布版本):
每一排表示一次垃圾收集。左边是开始的堆,右边是结束的堆。堆显示的右边是一个可配置图形。实心白色区域表示空白堆,黑色区域是充实区(也就是填充了对 象的区域),浅灰色区域是碎片区,红色、黄色和绿色区域是可配置图形。可以从命令行指定在可配置图形中显示什么。该工具依然很粗糙,对于用户也不够友好, 不过毋庸置疑它对JRockit的终端用户非常有用,所以这是一个非常不错但是不能通用的工具。
code coverage(试验性)
很多开发人员在以某种方式使用他们的应用程序时,使用code
coverage分析来研究诸如代码库中的多少以及哪些部分正在运行之类的状况。测试人员喜欢使用code
coverage来度量测试套件覆盖应用程序的比例。但是,对于大型应用程序,由code coverage工具所引起的性能开销通常是被禁止的。
JRockit内置了高性能的行code coverage。当启用code coverage运行时,代码将由记录行命中的捕获器生成。一旦某行被命中并记录,就删除捕获器,JRockit可以继续以接近全速的速度运行。
要使JRockit记录code coverage数据,必须指定一个命令行选项。
用法 -Xcodecoverage可以使用以下系统属性来控制该行为:
系统属性 | 描述 |
---|---|
jrockit.codecoverage.filter= <filterspec> | filterspec是个以分号(Windows)或冒号(Linux)隔开的筛选器字符串列表,它定义哪些类应当被覆盖。以“-”开头的筛选器字符串会被视为不应当覆盖的类。 示例: |
jrockit.codecoverage.filterfile= <filename> | 设置包含筛选器定义的文件的文件名。文件格式为每行一个筛选器字符串。 |
jrockit.codecoverage.outputfile= <filename> | 设置存放输出的文件。如果写入<filename>_0,输出文件不能被打开,那么将尝试<filename>_1,以此类推。在多个JVM共享一个公共命令行的情况中,这可能会很有用。 |
jrockit.codecoverage.testid= <id-string> | 设置初始测试标识符。 |
jrockit.codecoverage.verbose | 使code coverage更为详细。适用于在覆盖文件(均是纯文本文件)中执行文本比较。 |
jrockit.codecoverage.appendoutput | 设置对输出文件的写入为追加而不是覆盖。 |
这里给出特定于code coverage的参数,用于生成如下图中所示的数据。
-Xcodecoverage -Djrockit.codecoverage.filter=com/jrockit/console/*;com/jrockit/common/* -Djrockit.codecoverage.outputfile=console_coverage.txt在内部,由一个code coverage小工具来解释JRockit所生成的数据,如图3所示。
图3:code coverage工具的输出示例(点击图片查看大图)
结束语
BEA对Java运行时的掌控将其置于一个独一无二的位置:BEA交付了一些针对Java平台的低开销的管理和监控特性。很多针对BEA
JRockit的有趣的管理和使用特性正在开发中。其中一些已经随着包含在JRockit 5.0 R26中的JRockit Mission
Control而可以使用,更多特性也即将出现。更多信息请参见Mission Control home page。
参考资料
- An Introduction to JRockit Mission Control,Marcus Hirt撰写(dev2dev,2005年12月)
- Memory Leaks, Be Gone,Staffan Larsen撰写(dev2dev,2005年6月)——提供了关于内存泄漏检测系统的大量信息
- New Features and Tools in JRockit 5.0,Eva Andreasson撰写(dev2dev,2005年2月) ——提供了一份很早但却很有用的、JRockit 5.0中的多个特性的汇总
- dev2dev JRockit Product Center——包含大量可以订阅的信息和博客
- Mission Control section,dev2dev——包含JRockit工具的更多信息
JAVA开发者最常去的20个英文网站
2010-01-24 13:22:04
1.[http://www.javaalmanac.com] – Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
2.[http://www.onjava.com] – O’Reilly的Java网站. 每周都有新文章.
3.[http://java.sun.com] – 官方的Java开发者网站 – 每周都有新文章发表.
4.[http://www.developer.com/java] – 由Gamelan.com 维护的Java技术文章网站. 5.[http://www.java.net] – Sun公司维护的一个Java社区网站.
6.[http://www.builder.com] – Cnet的Builder.com网站 – 所有的技术文章, 以Java为主. 7.[http://www.ibm.com/developerworks/java] – IBM的Developerworks技术网站; 这是其中的Java技术主页.
8.[http://www.javaworld.com] – 最早的一个Java站点. 每周更新Java技术文章. 9.[http://www.devx.com/java] – DevX维护的一个Java技术文章网站.
10.[http://www.fawcette.com/javapro] – JavaPro在线杂志网站.
11.[http://www.sys-con.com/java] – Java Developers Journal的在线杂志网站. 12.[http://www.javadesktop.org] – 位于Java.net的一个Java桌面技术社区网站. 13.[http://www.theserverside.com] – 这是一个讨论所有Java服务器端技术的网站. 14.[http://www.jars.com] – 提供Java评论服务. 包括各种framework和应用程序. 15.[http://www.jguru.com] – 一个非常棒的采用Q&A形式的Java技术资源社区. 16.[http://www.javaranch.com] – 一个论坛,得到Java问题答案的地方,初学者的好去处。 17.[http://www.ibiblio.org/javafaq/javafaq.html] – comp.lang.java的FAQ站点 – 收集了来自comp.lang.java新闻组的问题和答案的分类目录.
18.[http://java.sun.com/docs/books/tutorial/] – 来自SUN公司的官方Java指南 – 对于了解几乎所有的java技术特性非常有帮助.
19.[http://www.javablogs.com] – 互联网上最活跃的一个Java Blog网站. 20.[http://java.about.com/] – 来自About.com的Java新闻和技术文章网站.
perl 模块自动化部署
2010-01-20 17:19:57
如果跨任何种类的许多不同计算机运行 Perl,您会知道跨这些计算机安装 Perl 扩展模块是多么令人厌烦。如果有 Web 服务器农场,并且需要将每台机器和用于安装的一组扩展模块的最新信息保持一致,那么管理过程会更糟。CPAN 对此可能有所帮助,但 CPAN 存在一些问题,这些问题使它无法成为可以在网络上广泛使用的解决方案。在介绍最终系统之前,本文将提供一些可能的解决方案。主要目标是统一的安装/模块集 合、单一下载和在网络上所有计算机中使用一组有保证的统一版本号。
Perl 模块安装
在 安装 Perl 的同时,您会开始认识到有多少模块组成了该语言的“基础”安装。随着时间的推移,还要安装越来越多的模块,以扩展 Perl 安装的功能。安装模块并不复杂。大多数模块都打包为简单的压缩 tarball。该 tarball 包含一些必要的文件 —— 如果需要,还包括用于第三方库集成的 C/C++ 代码。
大多数 Perl 模块都使用 MakeMaker
系统,它是安装基础 Perl 时一起安装的另一种 Perl 模块,它提供了关于 Perl
安装的信息,以及在适当位置构建和安装组件的机制。MakeMaker 将简单配置文件转换为标准 makefile,该 makefile
可以与大家熟悉的 make
命令一起使用。
使用 CPAN
如
果还不了解 Comprehensive Perl Archive Network(CPAN),那么可以参考随每次安装提供的主页。CPAN
可以以两种方式工作:通过交互 shell 或通过一系列函数,可以将这些函数用作范围较广泛的基于 Perl
脚本的解决方案的一部分。最简单地说,可以使用 CPAN,只通过输入 perl -MCPAN -e "install modulename"
来安装模块,其中 modulename 是要安装的包、绑定或完整 Perl 模块的名称。CPAN 将执行其他操作。
|
CPAN 自动化
大多数人都熟悉作为构建和安装 Perl 模块的交互 shell 的 CPAN。许多人不知道的是,提供这项功能的 CPAN 模块实际上只是内部应用程序接口(API)的包装器。例如,要生成已安装的且与 CPAN 上可用版本相比已经过时的模块的列表,可以仅调用 CPAN::Shell->r
。清单 1 是这条命令及其输出的例子。
清单 1. 生成过时模块的列表的代码
|
自动安装这些模块,这样就可以保持最新状态,将对 CPAN::Shell->r
的调用嵌入到对 CPAN::Shell->install
函数的调用中:
$ /usr/local/bin/perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
该代码转储清单 1 中的信息,然后安装每个模块,使其处于最新状态。
|
网络中的 CPAN 自动化
CPAN 是一个非常好的工具,但是该系统也有它的局限性。主要缺点之一就是它是单系统解决方案,如果以单一计算机为基础来管理 Perl 安装,那么这个解决方案很好。但是如果一组 Perl 模块分布在 Web 服务器农场中,或者甚至分布在实验室中的一系列平台上,那么在所有计算机中保持最新状态可能会非常花费时间,即使使用上面讨论的自动化技术也是如此。
CPAN 还会消耗许多 Internet 带宽,因为对于使用 CPAN 的每台计算机,CPAN 要从一个中心 CPAN 存储库下载文件的副本。CPAN 还依赖于配置,因此必须为每台计算机修改配置:只有在可以以完全一致的方式配置平台时,才可以复制配置文件,该配置文件位于 /perlinstalldirectory/CPAN/Config.pm 中。
使用 CPAN 时,一个明显的方法是使用 autobundle
函数。此函数生成 Perl 安装中所有已安装模块的列表,然后将该列表转储为可以执行的格式,将选择项重新安装到同一台计算机上(更新为最新的 Perl 版本后)或重新安装到另一台计算机上。清单 2 中的代码显示了如何创建新绑定。
清单 2. 用于创建 CPAN 自动绑定的代码
|
生成的文件位于 CPAN 安装目录内。可以从这个位置复制此文件,如果正升级到 Perl 的更高版本,那么只需运行 bundle
模块来重新安装所有东西即可:
$ perl -MCPAN -e 'install Bundle::Snapshot_2004_08_08_00'
虽然 bundle
函数很好用,但我必须承认,因为某些原因,我不是非常喜欢将绑定系统作为网络解决方案。首先,绑定依赖于每台计算机具有相同的配置,如果每项配置都相同,
那么这个方法会很好。但是如果具有不同的平台和环境,那么就会很容易发生问题。其次,因为自动绑定功能可以列出安装的每个模块,还可以列出多个包(每个包
可能包含多个模块)。不过,该功能还可以列出对 Perl 的更高版本的引用(作为一些模块更新的源)。
不过,最后的问题是绑定依赖于让一台计算机包含所有模块的最新版本。不能使用这项功能将标准套件升级到最新的版本,无论这些版本是什么,这一限制使系统在网络环境中的使用变得更复杂。
如果想构建定制解决方案,有两种可用方法。您可以使用中心 CPAN 安装 目录,也可以使用中心 CPAN 源 目录。
使用中心 CPAN 安装目录
在网络中配置 CPAN 的相对简单的方法(如果计算机都相同,则此方法很好)是创建在 Network File System(NFS)上共享的单一 CPAN 目录,将 CPAN/Config.pm 文件复制到每台计算机上,然后使用前面讨论过的 CPAN::Shell
技术在每台计算机上安装模块。在主计算机(通常是在 NFS 上共享 CPAN
目录的那台计算机)上安装“基础”模块集合。对于其他每台计算机,构建和安装每个必需模块的过程应该很快,因为源 tarball
已经存在。因此,不必再下载 tarball,这可以节约宝贵的 Internet 带宽和大量时间。
这项技术的主要问题是:对 于完全相同的计算机来说,会浪费处理器时间,您已经编译过一次,再完全重新编译就是在浪费时间。而且您还会将自己置于危险境地,在这种情况下,同一构建目 录可用于多台计算机,这真的不是什么好主意,因为不同的计算机可能同时编译源,从而导致计时错误,此外,在跨平台环境中,进行连接时会出现坏的目标文件。
使用中心 CPAN 源目录
对 上面的解决方案的修正是使用相同源目录和基本 CPAN 配置,但要手工更改配置文件,这样,每台主机的配置信息都是特定于主机的。用这种方法可以解决构建目录的问题,但是仍然要使用 tarball 的本地(即,在您的网络上)缓存版本。清单 3 提供了这类配置文件。
清单 3. CPAN::Config 文件的例子
|
需要将所有配置目录参数更改为每台计算机的本地信息,例如,将行 'build_dir' => q[/export/build/solaris/cpan/build],
改为指向本地计算机中的目录。同时,共享主计算机上的 CPAN 源目录,然后将 keep_source_where
参数改为指向 NFS 挂载的目录。
不 幸的是,这个解决方案也存在一些问题。首先,无法方便地记录要在每台计算机上安装的模块。还会遇到下面的问题:保持源目录(以及其他 CPAN 目录)中的信息正确且最新,而无需更新或下载 tarball 的更新版本,同时不会扰乱计算机的现状。这个问题可以导致每个系统中已安装模块版本之间的微小但很重要的差别,这是我们正尝试解决的关键问题。
|
使用 CPAN 创建严格安装
以 上两种解决方案的问题在于它们都依赖于对 CPAN 的使用,以及一些使 CPAN 工作的配置文件的操作。在局域网内(LAN),即使使用上面的技巧,CPAN 也不是理想的解决方案。因此,需要避开这些系统限制。为此,我将展示如何配置主分布,如何为每个平台创建安装集合,然后在每台计算机上运行安装。
配置主分配
在第一步中,将使用我们已经介绍过的一些元素。开始先像往常一样配置一台计算机,并设置默认模块集合。然后,使用 NFS 设置共享目录,使用这个目录将必需的文件分布到网络中的其他计算机中。现在编辑清单 4 中看到的 $destdir
变量,然后运行清单 4 脚本。该脚本执行以下三项操作:
- 标识模块。
- 下载源文件。
- 将源文件复制到分发目录中。
第 一个阶段通过检查 perllocal.pod 文件的内容,确定已安装模块的列表。每次使用 MakeMaker 系统安装模块时,都要更新这个文件。通过使用该文件,而不是使用 CPAN 中的内置模块,可以获取安装基础 Perl 时一起安装的第三方模块的列表。在第二阶段中使用 CPAN 下载源 tarball,这项操作发生最后复制 tarball 或 .zip 文件之前,通过在 CPAN 自身内部配置的任意一个方法来实现。作为这个过程的一部分,还要创建已复制模块的列表,在其他计算机上安装文件时要使用这个列表。
清单 4. 创建基础分布的代码
|
现在就有了包含所有源安装包的目录,使用该目录可以为那些将 给其分布相应 Perl 模块的每个平台构建一组已经编译的分布。下面将如何继续则取决于您的环境。如果具有同构环境,那么只需对整个网络将下一阶段的操作执行一次即可。然而,如 果拥有一个具有各种不同平台的异构网络,那么需要对每个不同环境重复下一步骤。
为每个平台创建安装集合
对于每个平台,都必须提取源文件,运行 MakeMaker,然后运行安装程序。要自动执行此任务,则需要使用清单 5 中的脚本。不幸的是,并不是所有的 MakeMaker 安装都是完全自动的,所以每次构建分布时都必须遵循交互系统,例如,设置目录位置或默认选项。
清单 5. 在每个平台上构建模块的代码
|
在每台计算机上运行安装
运行清单 5 中的脚本后,您会拥有一个目录,该目录中包含给定平台的所有“准备安装”模块。要在使用相同平台的其他任何计算机上安装这些模块,则只需转入每个目录并运行 make install
即可。同样,可以使用脚本完成这个过程,比如清单 6 中的脚本。
清单 6. 在每台主机上安装文件的代码
|
|
结束语
尽 管 Perl、CPAN 和 MakeMaker 系统提供了一些功能,但仍然无法仍将 Perl 模块的安装和分布完全自动化。但是可以使该过程对于某一范围内的计算机更简单些。单个模块都有自己的配置,单个平台也有自己的细微差别,这些使它们变得比 原先更加复杂。通过使用本文中的脚本,可以减少许多困难,同时减少通常可能与这个过程有关的时间花费。
JAVAのJVM的使用和下载
2010-01-20 13:22:04
1,什么是JVM
JVM是Java虚拟机(Java Virtual
Machine)的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,
如处理器、堆栈、寄存器等,还具有相应的指令系统。
2,为什么使用JVM?
Java语言最重要的特点就是可以在任何操作系统中运行。使用Java虚拟机就是为了支持与操作系统无关,在任何系统中都可以运行。
3,JVM的基本原理
Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
关于Java虚拟机的特别提示
微软公司出于竞争策略考虑,在Windows XP中不捆绑JVM。在此我们提供java虚拟机下载。
微软Java虚拟机下载
(注意:我们提供了多个镜像下载。如果某个站点无法下载,请尝试其他站点!)
微软Java虚拟机下载1
微软Java虚拟机下载2
Java虚拟机下载1
Java虚拟机下载2
SUN公司提供最新的Java虚拟机下载。
标题搜索
我的存档
数据统计
- 访问量: 94986
- 日志数: 112
- 图片数: 1
- 文件数: 1
- 书签数: 1
- 建立时间: 2007-01-16
- 更新时间: 2010-06-28