google talk 的php api 脚本xmpphp

May 9th, 2008

下周打算将cacti的整套脚本重写,让其真正能成为一个大众化的东西。初步的想法是做成一个插件化和模块化的脚本,使用的语言是php、perl和一点点的shell。

其中里面包含一个报警的模块,我们自己有popo的接口,但是如果给其他人用的话,还是需要使用msn或者gtalk的接口。个人比较倾向于gtalk,毕竟比较方便,但是考虑到使用msn的人比较多,还是做成可以选择的吧。

msn的接口我以前在家里面放一台PC作服务器的时候用过,用来记录adsl多久换一次IP,当电信adsl换IP的时候就会及时的通知到我。那么现在要找的就是google talk的api了。google talk使用xmmp协议,现在连新popo都支持gtalk了,api程序应该很容易找到,不过我要的是php的。

php 的google talk api在code.google.com上面就有:xmpphp.
使用非常简单,只需要include一个php文件,在调用几个函数就可以了:

<?php
include("xmpp.php");
$conn = new XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=False, $loglevel=LOGGING_INFO);
$conn->connect();
$conn->processUntil('session_start');
$conn->message('someguy@someserver.net', 'This is a test message!');
$conn->disconnect();
?>

有点要注意的是,message的中文必须要用UTF-8格式的,用GBK会变成乱码,linux可以使用iconv或者enca来转换即可。
万事具备,只欠东风。

syslog日志截断的问题

April 24th, 2008

举个例子,一天我们看到crontab的日志大小居然为零,于是运行”crontab -l”命令一下,如果是正常的话,即使该用户并无crontab记录,也会记录一条LIST信息到crontab日志中。

如果这时候发现crontab日志的大小还是零的话,说明syslog没有记录日志到crontab日志文件中。我们可以用:

#logger -p kern.info "test from system"

命令来产生一条测试信息。我们发现kern 日志中有显示这条测试信息,那么syslog进程应该是没有问题的。

crontab文件大小为零的原因是crontab log文件被改名或移动了。syslog进程还是会将log记录到改名或移动后的文件。因为syslog是附属于开放文件描述符程序,它会将log写入同一个文件描述符的文件中,直到文件描述符关闭为止。既然如此,我们只要将文件描述符关闭就可以了:

kill -SIGHUP $(cat /var/run/syslogd.pid)

该命令告诉syslog关闭并再次打开文件,解决日志的问题。

另外logrotate之类的命令应该已经会自动fix这个问题。

Vtune 使用小记

April 24th, 2008

Vtune是Intel公司的一个程序分析工具,今天Intel的讲师来我们公司做一个讲座,其中对vtune会有一些介绍和讲解,于是就提前预习了一下。

1、下载vtune
从intel的网站下载最新的vtune,linux平台的免费非商业版

http://www.intel.com/cd/software/products/apac/zho/275878.htm

linux版本:

http://www.intel.com/cd/software/products/apac/zho/245112.htm

下载前会让你填写邮箱信息,之后试用序列号会发到你的邮箱里面。试用期是1年。

2、安装vtune
下载以后,vtune9的大小大概是500M左右。
解包后使用”./install.sh”脚本在CLI中进行交互式的安装,不需要GUI的支持。
首先问你是否安装,如果你之前有安装过其他版本的,会自动uninstall,然后让你输入序列号。。。看清楚选项,一步一步往下走就可以了。

默认的安装路径是/opt/intel/vtune/目录,可以在第三步的第2个选项中更改路径。

由于vtune要安装ADK(Analyzer Driver Kit),所以需要内核源码进行模块的编译。

debian的话,安装headers就可以了,比如我的内核是2.6.18-6-686,那么安装
aptitude install linux-headers-2.6-686
就可以了让vtune安装程序自动进行编译了。

vtune的安装信息如下:

The current distribution of Linux on this system is Debian GNU/Linux lenny/sid

This platform has not been validated with the VTune(TM) Performance Analyzer 9.0 for Linux*.
It may work, but it is not supported.

The VTune(TM) Performance Analyzer 9.0 for Linux* was validated on
Red Hat* Enterprise Linux* 3.0 Update 9, 4.0 Update 5, 5.0, Fedora* Core 6, 7,
SuSE* 10.0, Linux* Enterprise Server (SLES) 9.0 Service Pack 3, 10 Service Pack 1,
Mandriva* Limited Edition 2005,Turbolinux* 10,Ubuntu* 7.04, Debian 4.0
and Red Flag* Linux* 5.0
Proceed with the install? ( Yes/No )

The Intel(R) VTune(TM) Performance Analyzer 9.0 for Linux* (full install) is being installed…

Please wait …

————————————————————
EntireX DCOM for Linux* component is being installed…
EntireX DCOM for Linux* component was successfully installed.
————————————————————
————————————————————
The VTune(TM) Performance Analyzer Driver Kit component is being installed…
Searching a pre-built driver … FAILED
Building the driver for your kernel … OK
Installing sampling driver boot script … OK
Loading the driver … OK
The VTune(TM) Performance Analyzer Driver Kit component was successfully installed.
————————————————————
————————————————————
The VTune(TM) Performance Analyzer Remote Agent component is being installed…
The VTune(TM) Performance Analyzer Remote Agent component was successfully installed.
————————————————————
————————————————————
The VTune(TM) Performance Analyzer component is being installed…
The VTune(TM) Performance Analyzer component was successfully installed.
————————————————————
————————————————————
The Eclipse component is being installed…
The Eclipse component installation failed.
————————————————————

===============================================================================
INSTALLATION NOTES

Intel(R) VTune(TM) Performance Analyzer 9.0 for Linux* installation
——————————————————————————-

Note: You need to be a member of the “vtune” group
in order to use the VTune(TM) Performance Analyzer.

Note: To invoke the VTune(TM) Performance Analyzer, run
“/home/joe/tmp/intel/vtune/bin/vtl” for command line
and “/home/joe/tmp/intel/vtune/bin/vtlec” to start
the VTune(TM) Performance Analyzer within Eclipse.

Note: To uninstall the VTune(TM) Performance Analyzer 9.0 for Linux*
please run “/home/joe/tmp/intel/vtune/bin/uninstall_vtune.sh” file.

Press .

===============================================================================
INSTALLATION WARNINGS

Intel(R) VTune(TM) Performance Analyzer 9.0 for Linux* installation
——————————————————————————-

从安装信息可以看到,安装程序编译了一个模块,并load进内存中了。

lsmod|grep vtune_drv
检查模块是否已经挂载。

vtune安装文档上面没有说debian可以安装,但我测试过etch和sid都可以正常安装vtune。

3、使用vtune:
运行vtune命令的用户需要加入到”vtune”组,主要是需要权限写”vtune/global_data”目录和”/dev/vtune_*”设备。

运行

/home/joe/tmp/intel/vtune/bin/vtlec

命令可以在X-window下打开vtune;

/home/joe/tmp/intel/vtune/bin/vtl

命令是在CLI下使用vtune。

CLI下面的”vtl”命令我现在还没有怎么试,当前主要用了”vtlec”命令打开vtune的GUI程序。

linux版本的Vtune在GUI上面似乎也是少了一些功能,看到Intel的讲师在台上演示windows版本的vtune,”callgraph”是会有一些柱图产生的,而我laptop上面安装的linux版本却没有,只有一堆的数字。

vtune的主要作用是通过CPU寄存器的记录,对调试程序进行分析,指出各个函数使用的CPU时间。如果有的函数使用CPU时间比较高,那就要看是否可以改成多线程的方式。vtune甚至会给你指出哪个函数中的哪个操作使用了多少CPU时间(百分比),当然前提是你需要将源代码也放在目录中。个人感觉vtune对于程序员还是很有用的,可以对自己的程序进行更细致的分析,当然,前提是你要使用Intel的CPU。

不过,可惜的是,我不是程序员。

ps和top命令的%CPU含义

April 15th, 2008

一直以为ps命令中的”%CPU”也是指实时的CPU使用率,所以一直都用它来做cacti监控process的cpu使用率。但是上周发现有点不对,ps的”%CPU”与top或者vmstat 的”%CPU”不一样。

ps命令的man里面的解释:

CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process. This is not ideal, and it does not conform to the standards that ps otherwise conforms to. CPU usage is unlikely to add up to exactly 100%.

top命令的man的解释:

k: %CPU — CPU usage
The task’s share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU
time. In a true SMP environment, if ‘Irix mode’ is Off, top will operate in number of CPUs. You toggle
‘Irix/Solaris’ modes with the ‘I’ interactive command.

我的理解是,top中的进程cpu使用率,是实时的CPU使用率,也就是

单位时间内进程使用的CPU时间/单位时间

而ps命令中的cpu使用率,反映的是该进程启动以来使用系统资源的情况:

进程启动以来使用的CPU时间/进程启动以来的实际时间

两者有很大的区别。
(上述所说的ps和top命令所在的操作系统是debian)。

又见80/20

March 31st, 2008

这期的《IT时代周刊》讲述了”Intel的40年成长记”,文章后面的”采访手记”对一些在中国的Intel管理人员的访问中,我又看到一个熟悉的故事。

洪力在给亚太区总裁陈俊圣做技术助理时,遇到了让他不能忘记的经历:有一天,亚太区的另一个总裁(当时英特尔亚太区实行两人联名总裁制)指出洪力的工作还不够多,他的理由是洪没有犯错误。但洪认为英特尔要求高质量的工作,自己当然不能犯错误。没想到,该总裁的解释让他茅塞顿开。对方告诉洪力,80%的工作应该是高质量,其他20%则是犯错误。其话寓意是洪力在熟悉的环境里“舒服”地工作,当然不会犯错误,但同时失去了创新的动力。当时的洪力特别震惊,他第一次了解到应该从这样的角度看待自己的工作。而这次的特殊文化刺激,正是形成洪力习惯于尝试新事物的职业特征的主要原因。

这让我一下子涌起了多年前的回忆。那一年的生日,我在奔向西安的飞机上,也是这本《IT时代周刊》,里面说了相同的故事。那时候,我在21cn似乎已经走到死胡同,所以很有感触
时光飞逝,转眼3年就过去了,为什么现在还是有这种感觉呢。需要给自己找一条路,路就在眼前。

尽量不要用旅行充电器来给手机充电

March 19th, 2008

昨天接到母亲的电话,她告诉我,中午她在公司给手机充电的时候,手机电池爆炸了。幸亏人离得比较远,没有伤着,但是却差点烧着了旁边的纸皮箱。实在是危险!
手机是我上年在淘宝买的,很便宜,400块左右的三星,怀疑是黑手机。
我们先是怀疑是电池出了问题,后来又觉得可能是旅行充电器的问题。因为现在的旅充的构造都很简单,似乎没有什么安全措施。而我的手机在直充的时候,会提示已经充电完毕,然后不再进行充电的。旅充则很多时候会一直充电,充它几十个小时也不会转成绿灯。
由于没有发票,估计也很难进行索赔,暂时打算就此算了。但是以后还是少用旅充进行充电了,就算一定要用,也不要长时间给电池充电,人也不要离开充电的地方,否则可能会造成火灾。

将vmware的网络连接方式改为bright

March 13th, 2008

我默认使用了VMWare的NAT方式进行网络连接。但是我发现popo经常出现掉线的情况,几乎一小时掉几次线,而popo又非常烂,每次登录都要占了我一只CPU。实在是受不了,于是打算将vmware的guest OS改为bright的网络连接方式。

在VMWare的配置界面上面选了”Bright”以后,重启Guest OS。发现VMWare只绑定了”eth0″,其他的interface都不能连接出去。由于我在office是使用”eth0″,在家里面是使用’eth1″的,如果只绑定一个interface,切换起来会很麻烦。最好的解决方法是建一个虚拟的interface,然后Guest OS通过这个虚拟的interface出来,再判断是在office还是home里面,使用nat通过”ech0″或者”eth1″出去公网。

首先建立虚拟的interface:

/etc/network/interface

文件里面添加:

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 10.10.10.1 netmask 255.255.255.0 up
down ifconfig $IFACE down
tunctl_user joe

重启网络即可出现新的interface:”tap0″。

然后让VMWare绑定”tap0″,运行

/usr/bin/vmware-config.pl

命令,重新对VMWare进行配置。(如果有什么custom的配置修改,运行前请先备份自己的配置文件)

如果没有特别的自定义配置,前面的全部按enter即可。在network配置的时候,选择”yes”,继续添加新的接口。然后输入”tap0″就可以了。

继续一路enter。

配置文件重新生成以后,进入VMWare网络配置界面,选择

Custom

在下拉菜单选择”tap0″。

启动Guest OS,在网卡上配置IP:”10.10.10.2″,GateWay:”10.10.10.1″
能ping通10.10.10.1就表示配置成功了。

最后在Master OS上面用iptables做个简单的NAT,Guest OS就可以连上网了。当然,也需要写个脚本进行office和home之间的切换。