存档

2010年5月 的存档

查看进程启动时间

2010年5月29日 1 条评论

Linux系统中通过ps命令查看进程状态,可以看到系统启动时间。但如果启动超过一天,它会变成问号。那如何获取这些进程的启动时间呢?

在Linux系统中,时间管理有两个基本概念:xtime和jiffies。

xtime主要给time系函数使用,结构比较简单(include\linux\time.h):

struct timespec {
	time_t	tv_sec;		/* seconds */
	long	tv_nsec;	/* nanoseconds, 纳秒,以前的版本是微秒*/
};

tv_sec就是大家平常所说的unix时间戳,在CMOS中维护,关机时由电池维持正常运行。

系统启动时,通过get_cmos_time()取cmos时间赋值。运行时,通过设置系统定时器,每隔一段时间触发一个节拍,他们管这个节拍叫tick。每触发一次tick,就会通过update_wall_time_one_tick()来更新xtime。

而jiffies是内核中的一个全局变量,它的功能看起来很简单:记录从系统启动以来的tick数。但它就是解开我们问题的关键。

在/proc/<pid>/stat中( 源码请参考proc_pid_stat(),文件是fs/proc/array.c ),维护了进程的很多状态信息,其中第22项是进程启动时的jiffies值,通过它可以计算出进程启动时,系统已经开机的时间。把这个时间加上系统启动时间(/proc/stat),就可以得到进程启动时间。

最后得到的脚本如下:

#!/bin/sh
function show_start_time( )
{
  pid=$1
  JIFFIES=`cat /proc/$pid/stat | cut -d" " -f22`
  UPTIME=`grep btime /proc/stat | cut -d" " -f2`
  START_SEC=$(( $UPTIME + $JIFFIES / 100 ))
  date -d "1970-01-01 UTC $START_SEC seconds"
}

if [ $# > 1 ]
then
  for pid in $@; do show_start_time ${#pid};done
fi

while read pid; do show_start_time ${#pid}; done

脚本中100是“用户可见”的tick频率(tick_rate),它的值等于我们熟悉的常量CLOCKS_PER_SEC。为什么要说“用户可见”呢?实际上,新版本的内核tick_rate,已经远高于100了(i386的是1000),但以前很多程序,都依赖于这个数。为了兼容,于是内核又做了一层封装。

分类: Linux 标签:

show variables与show status的区别

2010年5月26日 没有评论

这两个命令是查看MySQL状态很常用的两个命令,它们的语法很相似:

SHOW [GLOBAL | SESSION] STATUS    [LIKE 'pattern' | WHERE expr]
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern' | WHERE expr]

作用也很类似,都是用于查看MySQL服务器的状态。

在日常使用中,有时会分不清:什么时候用variables,什么时候用status?查看具体某个状态,应该使用哪条命令?

以前本人都是记住了某些常用的几个值,遇到不熟悉的,就两个都试一次,囧。

今天翻了一下手册,才知道了它们的区别:

SHOW VARIABLES shows the values of MySQL system variables.
SHOW STATUS provides server status information

show variables查看的是mysql系统变量,是MySQL系统运行时的参数,如字符集设置、版本信息、默认参数等,除非手动修改,否则运行时一般不会改变;

而status是MySQL服务器运行统计,如打开的表数量、命令计数、qcache计数等。

了解了这些区别后,查询状态时就可以很快的区分出应该用哪条命令了。

分类: MySQL 标签: ,

SyntaxHighlighter自动换行与googlechrome冲突

2010年5月23日 没有评论

安装syntaxHighlighter后,发现了一个问题:如果插入的代码段中,含有较长的行,超过了代码块Box的长度。这种情况下,预期它是可以换行的,但实际上在googlechome主题下并未换行,导致超出部分的代码不可见。

通过搜索引擎发现,还是有不少人有相同的问题。于是就折腾了一下:

  • SyntaxHighlighter 2.0后,已经支持自动换行了,并可以通过wrap-lines的配置来打开或者关闭。于是尝试将wrap-lines设置为true,依旧不能正常换行,未解决问题。
  • 尝试换主题,发现默认主题下,换行是可以正常工作的
  • 不同主题会影响到显示效果的,主要是CSS。于是开始怀疑是CSS冲突。 用Firebug分析比较两个主题的CSS,逐渐注意到white-space这一选项。
    • 在googlechrome主题下,经过计算后的white-space值是pre,而默认主题下,计算结果为normal。
    • 再次搜索,在cssmagic的一篇文章中(很清晰明白,推荐阅读),找到以下表格:
  • white-space 属性值一览表 

    属性值 空白符 换行符 自动换行 最早出现于
    normal 合并 忽略 允许 CSS 1
    nowrap 合并 忽略 不允许 CSS 1
    pre 保留 保留 不允许 CSS 1
    pre-wrap 保留 保留 允许 CSS 2.1
    pre-line 合并 保留 允许 CSS 2.1
    • 在Firebug中的CSS中,检查white-space的CSS样式文件,定位到主题的screen.css。

    • 编辑该文件,找到white-space:pre,移除并更新文件,刷新一下,问题解决。

折腾的结论如下:

  • 对于定制较高的主题,要注意主题与插件的CSS冲突
  • 本文适用的syntaxHighlighter为2.1.364
分类: 建站 标签: ,

Godaddy免费windows空间使用wordpress

2010年5月22日 1 条评论

在godaddy注册过域名的朋友都知道,煮一个米就会免费送一个空间。这个空间很不错:

  • 速度快,ping值很理想,打开页面速度很满意(200ms左右)
  • 空间大(10G),流量大(3000G),对于本站之流的小博客站,绰绰有余
  • 有丰富的PHP/MySQL支持

但缺点很明显:它的顶部有一个巨大的广告,让人无法接受。linux无论动态还是静态页面,都有这个广告。但windows主机的php页面,是没有这个广告的(静态的也有),而我们知道wordpress基于php,因此,对于我等穷人,选它的windows主机来做wordpress站,还是很不错的选择。

  1. 申请域名和免费开通空间,网上资料很多,就不浪费笔墨了,可以参考openboy的文章。但要注意,开通空间时,请选择Windows Hosting,并开通PHP支持。
  2. 进入管理面板,选择Database->MySQL,在打开的mysql管理页面中,初始化用户、创建数据库。
    image 
    因为godaddy的mysql和windows机器是独立的,wordpress默认的localhost无法连接到mysql,所以还应该找到mysql的地址。打开phpMyqlAdmin
    image 
    登录pma后,在打开的管理页面,就可以看到这个信息了:
     image
  3. 安装wordpress,需要注意的是:将数据库的ip要填上面记下来的IP。
  4. 几分钟后,wordpress站就新鲜出炉了。
分类: 建站 标签: ,

Google的PAC-MAN主页

2010年5月22日 没有评论

今天上Google时,赫然发现主页居然是吃豆人,更让人意外的是:耐心等待一会,它居然可以玩:

image

 

原来这是Google为了纪念PAC-MAN 30周年而特意制作的。小时候就很喜欢玩这个游戏,很开心玩了一会,不亦乐乎。只可惜三条命,现在水平大降,玩一会就死了。

但折腾的时候,发现了两个好玩的地方:

1. 多按一次页面上的Insert Coin,会进入双人模式,屏幕上会出现两个pac-(wo)man,一个用方向 键控制,一个是wasd控制

image

2. 发现它居然是用js和图片做出来的,完全保证了跨平台性、很赞。

分类: 未分类 标签: