今天下载了IISDiag大体玩了一下,发现这东西真不错,诊断IIS故障有多了一个利器。
刚好有客户反映他的ASP站点老是出问题,刚好把新武器演练一下,结果居然揪出了导致IIS6种ASP请求挂起的首恶(第一恶是也,非首要恶)—-Scripting.Dictionary组件。
debug纪录显示有5个页面请求被block,原因是这些页面都请求了Scripting.Dictionary这个组件,同时这个组件被另外一个页面调用并执行,所以一旦这个页面的请求出现问题,会导致所有后续页面被block,根本原因为Scripting.Dictionary这个组件为STA模式设计,所以页面在处理Scripting.Dictionary请求时会将请求串行话,而第一个请求处理如果出现意外情况,则后续请求皆会被block。
继续检查更详细的信息,发现调用此组件是在Session处理中,具体代码为:
Set Session(strName) = Server.CreateObject(”Scripting.Dictionary”)
然后又在网上发现了这样一句话:
如果在session级保存一个dictionary对象会降低系统的性能,而在application级保存一个dictionary对象会导致web服务器崩溃
—–wrox: asp程序员参考手册里第137页
至此原因找到,一方面为客户程序没有考虑MTA环境下ASP编程的注意事项(其实很多从ASP2.0 under IIS5 过来的程序都没考虑过此问题,只是恰好出问题的几率比较小而已),另一方面是客户程序在不恰当的位置调用了不恰当的组件,导致很容易使程序被block。
相信以后会慢慢找出更多存在类似遗留问题的组件,那时对于IIS6 ASP hang故障将会有更快更准确地定位能力。
三点结论:
1,要佩服MS在新技术应用上的能力与决心,COM的STA->MTA的转换能在短时间内完成,并将绝大多数底层架构升级为MTA环境,同时考虑了兼容问题,这是需要佩服的。反观某些开源软件,底层数据结构说改就改,几天一编,同版本号的内核竟然都敢做成不兼容,虽然号称Free,但谁敢用这些产品作服务?你以为每家都有IBM的实力?
2,即使存在问题,不是掩盖而是积极解决,请看关于此问题的KB,同时又提供了如此快捷方便的工具来定位问题,试问谁能做的更好?
3,敬告国内某ASP程序提供商,你们的产品存在类似问题。尽快改进你们的产品吧。现在还可以以兼容性作为理由,但不要等所有问题日后暴露出来再想办法。
其实就是个侧面预览切换而以,并没有实现真正的3D桌面,比xgl差得远,不过既然能这样显示说支持3d的api已经成熟,估计以后会看到真正的3D桌面,或者在其他增强程序中实现
这是今年第三次吃到喜糖了,不知为什么都集中在今年结婚.
今天研究了下pcap,简单写了段代码,能嗅探到混杂模式网卡接收到的所有包了,贴一下以备以后使用:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
char *dev, errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t * alldevsp;
dev = pcap_lookupdev(errbuf);
printf(”Device used: %sn”, dev);
int x=pcap_findalldevs(&alldevsp,errbuf);
pcap_if_t * ifdev;
for(ifdev=alldevsp;ifdev;ifdev=ifdev->next)
{
printf(”Device: %sn”,ifdev->name);
}
struct bpf_program filter;
char filter_app[] = “host 10.0.0″;
bpf_u_int32 mask;
bpf_u_int32 net;
pcap_t* adhandle;
adhandle = pcap_open_live(dev,100,1,1000,errbuf);
pcap_lookupnet(dev, &net, &mask, errbuf);
pcap_compile(adhandle, &filter, filter_app, 0, net);
pcap_setfilter(adhandle, &filter);
pcap_dumper_t* dumpfile;
dumpfile=pcap_dump_open(adhandle, “packet.dat”);
int re;
struct pcap_pkthdr* header;
u_char* pkt_data;
while((re=pcap_next_ex(adhandle,&header,(const u_char**)&pkt_data))>=0)
{
pcap_dump((unsigned char*)dumpfile,header,pkt_data);
}
pcap_freealldevs(alldevsp);
return(0);
}
不到1个小时就解决了这个问题,不由得佩服自己思路敏捷.
首先抛弃itouch这个东西,google了一下,官方没有解决方案.
其次就是找第三方软件把这些快捷键重新定义,同样google了一下,发现了一个叫做hot keyboard的东西,试验了一下,可以识别出大部分多媒体键和web功能键,但不是所有键都起作用,不过我99%的常用键都已经解决了。
然后继续找有没有更好的解决方案,继续放狗,关键词:logitech elite keyboard driver for vista ,发现有老外谈到windows键盘扫描码的remap问题,并给出了通过注册表修改map的方法,并提到了有些扩展扫描码usb键盘是不起作用的,所以立即切换接口到ps/2,可惜hot keyboard还是认不出剩余的几个键。继续找,发现老外贴出了一个工具,用来管理map的注册表键值的:Sharpkeys,赶紧拖下来试验,竟然是用.net 2.0写的。试验结果正如猜测的,所有键扫描码都能找到,所以只要把hot keyboard认不到的键remap到某些组合键,然后再设定宏即可,这样键盘就100%起作用了,而且功能比itouch强大许多,哈哈。
PS:Sharpkeys给出的扫描码很有意思,普通的105键就不提了,媒体播放键的扫描码为:
Media:Play/Stop/Pause/Next/Previous/Mute
App:Media Select/Email/Messenger/My Computer
Web:Search/Back/Forward/Stop/Refresh/Favorites/Home
另外就是一些罗技特有的:
Logitech:iTouch/Webcam/Shopping
总结一下hot keyboard无法认出来的有Logitech全套,Web的最后2个,App的后2个。
看来对于这些多媒体键盘的扩展已经有可国际通行的标准了,呵呵。
首先庆祝新硬盘投入使用。
Seagate 7200.9 160G Sata2
本打算买250G了,怎奈五一期间开销太大,再加上马上就要交下三个月房租了,所以暂时先买160G的了。不过单碟容量160G,一张盘,性能还真不是吹的,实测突发传输速率能达到180MB/s,平均传输速率75MB/s,非常不错了。过两个月再买个组Raid0就无敌了。
然后就是在新硬盘上安装Windows Vista 5381了,如果没差错这个版本应该是Beta2之前的最后一个版本了,从网上看了些评价说是已经基本可以正常使用才下定决定装的。
安装过程没什么困难,只是要BS一下那谁写的文章,谁说重起一次就能安装好的?我安装过程足足重起了4次才好,有次重起屏幕键盘鼠标都没响应,我差点当死机Reset了。
默认安装所占用的空间容量之大让我吃惊。
启动起来之后界面的华丽更让我吃惊,操作系统作到这种程度比玩具都华丽,别想Mac OS了!
但最让人感慨地还是MS在人性化方面不懈的追求。Vista很多细节的修改都是从人性化方面考虑的,让人觉得系统就应该这么用。本以为XP已经在这方面做到近乎完美了,现在看看Vista的改进发现MS已经能在这方面引导用户的使用习惯了。估计很多用户在使用之后会发出类似感慨:原来这样设计可以用得更舒服!以前怎么想不到!
Documents and Settings这个难念又难写的文件夹名字终于变成Users了,以后玩命令行更方便了,呵呵。里面文件夹的组织方式的变化让人使用起来更舒服了。
不过不少软件在Vista下使用都碰到问题了,网络相关工具问题最多,估计是那个IE7的原因,浏览器的安全革命不是那么容易做的,MS还要努力,呵呵。
玩了一天发现vista对硬件要求果然不是一般的高,凭我现在的配置也只是能所有特效全开基本流畅而以,看来新一轮硬件升级明年又要开始了。我最满意的就是这台20寸的LCD,很明显vista显示的字体与以前的系统有些不同,整体感觉漂亮了。看来我的预测是正确的:随着显示器尺寸加大,点距变小,操作系统肯定会改变字体来适应新的显示分辨率需求。现在看来1600×1200的分辨率从主题的搭配到字体的显示基本都是最舒服的。那些还在用1024×768的兄弟们估计明年要郁闷了,显示器不够看了,呵呵。
今天发现最不爽的一点就是键盘的驱动。我这个Elite用了一年了,感觉真的是非常爽。但今天就栽在vista上了。vista现在的音量管理可以做到按照每个应用程序单独设置音量,这就导致了一个非常严重问题:itouch热键改变的音量只是itouch程序自己的,而不是主音量,所以我的音量滚轮和静音按键统统失去作用。还好其他热键基本正常,而我的音箱线控还能拖出来,否则真郁闷到家了。
问题1:自治系统的指示符是一个16BIT的数,范围是从1~65535,64512~65535的AS编号是留作私
用的。
问题2:在Zebra上配置BGP成功的范例:
Current configuration:
!
hostname bgpd
password zebra
log stdout
!
bgp config-type cisco
!
router bgp 65500
neighbor 10.0.0.200 remote-as 65500
!
address-family ipv4
neighbor 10.0.0.200 activate
network 192.168.1.0
no auto-summary
no synchronization
exit-address-family
!
line vty
!
end
RedHat企业版自从AS4开始,桌面版本自从FC3开始,不再单独提供kernel-sourcecode的rpm安装包,原因是RedHat认为没有必要维护单独的kernel-sourcecode包,因为所有的源代码包都应该包含在.src.rpm中而不是rpm中。所以在这些高版本的RedHat Linux上,我们如果需要定制内核的话,没有直接的源代码rpm可以安装,只能通过kernel.org下载的tar.gz的包手工安装,或者通过kernel-*.src.rpm编译出kernel-source包再来安装。后面一种方法可以享受到RedHat针对内核的某些参数和代码的优化,因此对使用RedHat发行版特别是企业版本的,是有一定好处的。
但是目前很多人至今分不清内核,内核开发,内核源代码一些包之间的关系,因此在编译内核的时候经常走弯路,同时RedHat官方对于如果得到kernel-source也没有明确的指示,导致很多人不得要领。
首先认清楚各rpm包的内容和用途
kernel-*.rpm ————- 内核二进制包,没有的话系统都起不来
kernel-sourcecode-*.rpm——————- 内核源代码包,安装到/usr/src/linux-*下面的,包含内核源代码,编译内核必须(当然是不考虑用kernel.tar.gz编译的情况),但高版本RedHat Linux不再提供此rpm,原因参见官方Release Note,这篇文章的最终目的就是要我们自己把这个包搞出来。
kernel-devel-*.rpm—————-内核开发包,安装到/usr/src/kernels,用于内核模块开发,组织形式跟内核源代码包类似,包含了部分内核源代码。注意很多人误认为这个就是内核源代码包,直接拿它来编译内核,当然不可能成功。这个包只是用于内核模块一级开发,例如驱动程序等,虽然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因为缺失了核心源代码。
kernel-*.src.rpm—————RedHat提供的用于建立rpm的源代码包,安装到/usr/src/redhat中,使用rpmbuild可以从这个包中build出上面所说的所有包。
现在就来从src.rpm编译出上面的所有的包,除了sourcecode这个包其他的包都可以在不用修改任何地方的情况下直接rpmbuild出来,唯有sourcecode这个比较麻烦,一定要按照下面的步骤来做,我以RedHat AS4 所带的版本为例,其他版本相同。
#首先安装src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#进入相应目录,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
1,define buildsource 0————我的这个在第8行,改为1,这就是为什么没有源代码包的原因,因为默认不生成源代码包
2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel——-我的在572行,如果没用用X的话,把这句注释掉,这样编译出来的包就不依赖于X-window的某些包,因为内核配置是可以make xconfig的,所以默认依赖X-window,我没装X-window,因此这个就去掉了。
#保存退出
touch /etc/beehive-root
#这句命令非必须,如果不做的话,最后编译出来的包都会变成kernel-*.*-root.rpm,多了个root,据说是为了标示包的编译人的,如果touch了这个文件,就没有这个问题了,命名和官方rpm一样。
rpmbuild -ba –target=i686 ./kernel-2.6.spec
#编译i686平台的所有包,这样上面介绍的所有包都会生成,或者换成rpmbuild -bb –target=i686 ./kernel-2.6.spec只编译非src.rpm。
#所有包就会生成到/usr/src/redhat/RPMS/i686下面
#如果只需要sourcecode而并非所有rpm包,那在修改spec文件时还要修改如下行:
48 %ifarch noarch
49 %define builddoc 1
50 %define buildsource 0—————-这里0修改为1
在编译的时候使用rpmbuild -ba –target=noarch ./kernel-2.6.spec,这样仅仅编译soucecode和doc包,会节省很多时间。
注意,此篇文章所讲所有内容仅适用于使用2.6内核的新版本RedHat Linux,2.4版本内核代码组织方式不同,不适用此文章。
从google找到了一个添加代码高亮显示的WordPress插件,先应用一下。
顺带测试一下新blog的trackback功能。
感谢插件作者andot。
放狗搜到某位大虾的大作,由于使用的是2.0版的,整理如下:
1,将index.php复制一份为dashboard.php。
2,将index.php修改为如下代码,只有一行:
3, 打开menu.php,修改:
$menu[0] = array(__(’Dashboard’), ‘read’, ‘index.php’);
修改成
$menu[0] = array(__(’Dashboard’), ‘read’, ‘dashboard.php’);
以上操作皆在wp-admin目录进行。