Bing.com、Twitter.com、Live.com、Flickr.com, 以及Hotmail.com集体被封

Bing.com 仅上线一天,就别中国伟大的GFW给封掉了,同时被封的还有Twitter.com,Flickr.com还有两个微软的Live.com,Hotmail.com,这次微软真的“必应”了。

此次事件并非微软服务器故障,影响的微软服务有: 必应 Bing, Hotmail, Spaces, SkyDrive 等所属于以上三个域名的在线服务,并且 Mail 客户端无法接收 Hotmail 邮件,注意,Windows Live Messenger 是可正常登录的。不过好在微软其他的大部分在线服务是通过 https://login.live.com 登录的,而躲过此难。

所有的封锁都是针对域名的关键字,普通代理都上不去的。玩Twitter的目前只好暂时通过HelloTXT来更新Twitter了。

可能被封的原因是因为 Bing 视频搜索功能,太强大了,把××视频都给搜出来,GFW怒了。

Nginx.Me

嘿嘿,注了Nginx.Me这个米,自己比较喜欢Nginx,就。。。虽然.me的域名不是很好。。。
Nginx.Me Nginx迷

我爱Nginx......

ghs.google.com可用IP列表(2009年9月25日)

由于自己使用GOOGLE的邮箱服务,但是ghs.google.com的IP经常被GFW,所以自己弄了一个ghs的解析服务,当IP被封的时候我会及时更新,并在这里贴出最新的地址。
2009年5月31日更新:

  • 72.14.232.215
  • 72.14.207.121(被封)
  • 74.125.53.121(被封)
  • 74.125.95.121(被封)
  • 216.239.32.21
  • 216.239.36.21

如果要使用的话,创建CNAME到ghs.licess.com就等同于ghs.google.com。

Yahoo域名转入name.com

两个月前在Yahoo花了1.99$注册了VPSer.Net这个域名(详情请看:http://blog.licess.com/yahoo-199-domain/ ),现在到两个月的时间了该转出了,要不下年续费30多刀,很心疼的。。。

下面记录一些过程:

1、打开 http://smallbusiness.yahoo.com/ ,点击yahoo-loginsmall Business,登录服务管理,再到域名管理yahoo-cp

点击Domain Control Panel

2、获取转移码:如果域名处于锁定状态,将无法获得转移码,所以先解锁。

yahoo-11
点击“Edit Domain Locking”,根据提示步骤,点击确认解锁。

yahoo-2

yahoo-3

再点击“View your authorization code”获取转移码

yahoo-5

2、登录 www.name.com点击页面下方的,如果没有name.com的帐号,请注册。

yahoo-6

点击“Transfer Domain Names”,到

yahoo-7填写域名,及转移码信息,点击submit,根据提示付款即可。

3、付款完成,查看你注册yahoo邮箱里的邮件,查看一封为:Name.com - Transfer Confirmation (Transfer ID:×××××))的邮件,里面有一个

“To PROCEED with the transfer, please click on the following URL:

https://www.name.com/transfers_in/accept.php?key=×××××××××××××××”

点击链接确认即可。

如果不进行确认,5天后name.com会自动取消本次转移操作。
整个域名转移过程需要4、5天的时间。

注意:完成转移后,要到yahoo的控制面板取消掉了这个域名(cancel plan),要不然yahoo以后还会继续自动扣款。
更新:2009年5月25日
今天登陆Name.com查看,已经转移成功,也不发个邮件提醒一下。

Linux常用性能检测命令

一、uptime
     Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量。如果进程要求CPU时间被阻塞(意味着CPU没有时间处理它),load average值将增加。另一方面,如果每个进程都可以立刻得到访问CPU的时间,这个值将减少。
   UP kernel下的load average的最佳值是1,这说明每个进程都可以立刻被CPU处理,当然,更低不会有问题,只说明浪费了一部分的资源。但在不同的系统间这个值也是不同的,例如一个单CPU的工作站,load average为1或者2都是可以接受的,而在一个多CPU的系统中这个值应除以物理CPU的个数,假设CPU个数为4,而load average为8或者10,那结果也是在2多点而已。
点击在新窗口中浏览此图片
   你可以使用uptime判断一个性能问题是出现在服务器上还是网络上。例如,如果一个网络应用运行性能不理想,运行uptime检查系统负载是否比较高,如果不是这个问题更可能出现在你的网络上。
二、top
   Top命令显示了实际CPU使用情况,默认情况下,它显示了服务器上占用CPU的任务信息并且每5秒钟刷新一次。你可以通过多种方式分类它们,包括PID、时间和内存使用情况。
点击在新窗口中浏览此图片
下面是输出值的介绍:

引用
PID:进程标识
USER;进程所有者的用户名
PRI:进程的优先级
NI:nice级别
SIZE:进程占用的内存数量(代码+数据+堆栈)
RSS;进程使用的物理内存数量
SHARE;该进程和其他进程共享内存的数量
STAT:进程的状态:S=休眠状态,R=运行状态,T=停止状态,D=中断休眠状态,Z=僵尸状态
%CPU:共享的CPU使用
%MEM;共享的物理内存
TIME:进程占用CPU的时间
COMMAND:启动任务的命令行(包括参数)

进程的优先级和nice级别
   进程优先级是一个决定进程被CPU执行优先顺序的参数,内核会根据需要调整这个值。Nice值是一个对优先权的限制。进程优先级的值不能低于nice值。(nice值越低优先级越高)
   进程优先级是无法去手动改变的,只有通过改变nice值去间接的调整进程优先级。如果一个进程运行的太慢了,你可以通过指定一个较低的nice值去为它分配更多的CPU资源。当然,这意味着其他的一些进程将被分配更少的CPU资源,运行更慢一些。Linux支持nice值的范围是19(低优先级)到-20(高优先级),默认的值是0。如果需要改变一个进程的nice值为负数(高优先级),必须使用su命令登陆到root用户。下面是一些调整nice值的命令示例,
以nice值-5开始程序xyz

#nice –n -5 xyz

改变已经运行的程序的nice值

#renice level pid

将pid为2500的进程的nice值改为10

#renice 10 2500

僵尸进程
   当一个进程被结束,在它结束之前通常需要用一些时间去完成所有的任务(比如关闭打开的文件),在一个很短的时间里,这个进程的状态为僵尸状态。在进程完成所有关闭任务之后,会向父进程提交它关闭的信息。有些情况下,一个僵尸进程不能关闭它自己,这时这个进程状态就为z(zombie)。不能使用kill命令杀死僵尸进程,因为它已经标志为“dead”。如果你无法摆脱一个僵尸进程,你可以杀死它的父进程,这个僵尸进程也就消失了。然而,如果父进程是init进程,你不能杀死init进程,因为init是一个重要的系统进程,这种情况下你只能通过一次重新启动服务器来摆脱僵尸进程。也必须分析应用为什么会导致僵死?
三、iostat
   iostat是sysstat包的一部分。Iostat显示自系统启动后的平均CPU时间(与uptime类似),它也可以显示磁盘子系统的使用情况,iostat可以用来监测CPU利用率和磁盘利用率。
点击在新窗口中浏览此图片
   CPU利用率分四个部分:

引用
%user:user level(应用)的CPU占用率情况
%nice:加入nice优先级的user level的CPU占用率情况
%sys:system level(内核)的CPU占用情况
%idle:空闲的CPU资源情况

   磁盘占用率有下面几个部分:

引用
Device:块设备名
Tps:设备每秒进行传输的数量(每秒的I/O请求)。多个单独的I/O请求可以被组成一个传输操作,因为一个传输操作可以是不同的容量。
Blk_read/s, Blk_wrtn/s:该设备每秒读写的块的数量。块可能为不同的容量。
Blk_read, Blk_wrtn:自系统启动以来读写的块设备的总量。

块的大小
   块可能为不同的容量。块的大小一般为1024、2048、4048byte。可通过tune2fs或dumpe2fs获得:

引用
[root@rfgz ~]# tune2fs -l /dev/hda1|grep 'Block size'
Block size:               4096
[root@rfgz ~]# dumpe2fs -h /dev/hda1|grep 'Block size'
dumpe2fs 1.35 (28-Feb-2004)
Block size:               4096

四、Vmstat
   Vmstat命令提供了对进程、内存、页面I/O块和CPU等信息的监控,vmstat可以显示检测结果的平均值或者取样值,取样模式可以提供一个取样时间段内不同频率的监测结果。
点击在新窗口中浏览此图片
注:在取样模式中需要考虑在数据收集中可能出现的误差,将取样频率设为比较低的值可以尽可能的减小误差的影响。
下面介绍一下各列的含义

引用
·process(procs)
r:等待运行时间的进程数量
b:处在不可中断睡眠状态的进程
w:被交换出去但是仍然可以运行的进程,这个值是计算出来的
·memoryswpd:虚拟内存的数量
free:空闲内存的数量
buff:用做缓冲区的内存数量
·swap
si:从硬盘交换来的数量
so:交换到硬盘去的数量
·IO
bi:向一个块设备输出的块数量
bo:从一个块设备接受的块数量
·system
in:每秒发生的中断数量, 包括时钟
cs:每秒发生的context switches的数量
·cpu(整个cpu运行时间的百分比)
us:非内核代码运行的时间(用户时间,包括nice时间)
sy:内核代码运行的时间(系统时间)
id:空闲时间,在Linux 2.5.41之前的内核版本中,这个值包括I/O等待时间;
wa:等待I/O操作的时间,在Linux 2.5.41之前的内核版本中这个值为0

   Vmstat命令提供了大量的附加参数,下面列举几个十分有用的参数:

引用
·m:显示内核的内存利用率
·a:显示内存页面信息,包括活跃和不活跃的内存页面
·n:显示报头行,这个参数在使用取样模式并将命令结果输出到一个文件时非常有用。例如root#vmstat –n 2 10以2秒的频率显示10输出结果
·当使用-p {分区}时,vmstat提供对I/O结果的统计

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片
五、ps和pstree
   ps和pstree命令是系统分析最常用的基本命令,ps命令提供了一个正在运行的进程的列表,列出进程的数量取决于命令所附加的参数。例如ps –A 命令列出所有进程和它们相应的进程ID(PID),进程的PID是使用其他一些工具之前所必须了解的,例如pmap或者renice。
   在运行java应用的系统上,ps –A 命令的输出很容易就会超过屏幕的显示范围,这样就很难得到所有进程的完整信息。这时,使用pstree命令可以以树状结构来显示所有的进程信息并且可以整合子进程的信息。Pstree命令对分析进程的来源十分有用。
点击在新窗口中浏览此图片
六、Numastat
   随着NUMA架构的不断发展,例如eServer xSeries 445及其后续产品eServer xSeries 460,现在NUMA架构已经成为了企业级数据中心的主流。然而,NUMA架构在性能调优方面面临了新的挑战,例如内存分配的问题在NUMA系统之前并没人感兴趣,而Numastat命令提供了一个监测NUMA架构的工具。Numastat命令提供了本地内存与远程内存使用情况的对比和各个节点的内存使用情况。Numa_miss列显示分配失败的本地内存,numa_foreign列显示分配远程内存(访问速度慢)信息,过多的调用远程内存将增加系统的延迟从而影响整个系统的性能。使运行在一个节点上的进程都访问本地内存将极大的改善系统的性能。
点击在新窗口中浏览此图片
※我使用的系统不支持NUMA架构,此图为原文档截图。
七、sar
   sar程序也是sysstat安装包的一部分。sar命令用于收集、报告和保存系统的信息。Sar命令由三个应用组成:sar,用与显示数据;sa1和sa2,用于收集和存储数据。默认情况下,系统会在crontab中加入自动收集和分析的操作:

引用
[root@rfgz ~]# cat /etc/cron.d/sysstat
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib/sa/sa2 -A

   sar命令所生成的数据保存在/var/log/sa/目录下,数据按照时间保存,可以根据时间来查询相应的性能数据。
   你也可以使用sar在命令行下得到一个实时的执行结果,收集的数据可以包括CPU利用率、内存页面、网络I/O等等。下面的命令表示用sar执行5次,间隔时间为3秒:
点击在新窗口中浏览此图片
八、free
   free命令显示系统的所有内存的使用情况,包括空闲内存、被使用的内存和交换内存空间。Free命令显示也包括一些内核使用的缓存和缓冲区的信息。
   当使用free命令的时候,需要记住linux的内存结构和虚拟内存的管理方法,比如空闲内存数量的限制,还有swap空间的使用并不标志一个内存瓶颈的出现。
点击在新窗口中浏览此图片
Free命令有用的参数:

引用
·-b,-k,-m和-g分别按照bytes, kilobytes, megabytes, gigabytes显示结果。
·-l区别显示low和high内存
·-c {count}显示free输出的次数

九、Pmap
pmap命令显示一个或者多个进程使用内存的数量,你可以用这个工具来确定服务器上哪个进程占用了过多的内存从而导致内存瓶颈。
点击在新窗口中浏览此图片
十、Strace
   strace截取和记录进程的系统调用信息,还包括进程接受的命令信号。这是一个有用的诊断和调试工具,系统管理员可以通过strace来解决程序上的问题。
   命令格式,需要指定需要监测的进程ID。这个多为开发人员使用。

strace -p <pid>

十一、ulimit
   可以通过ulimit来控制系统资源的使用。请看以前的日志:使用ulimit和proc去调整系统参数
十二、Mpstat
   mpstat命令也是sysstat包的一部分。Mpstat命令用于监测一个多CPU系统中每个可用CPU的情况。Mpstat命令可以显示每个CPU或者所有CPU的运行情况,同时也可以像vmstat命令那样使用参数进行一定频率的采样结果的监测。
点击在新窗口中浏览此图片
十三、附录
   本文截取和修改自IBM的红皮书Tuning Red Hat Enterprise Linux on IBM eServer xSeries Servers。

Nginx支持手机访问(WAP/XHTML)相关配置

1、判断手机用户

一般通过User-Agent来判断,从网上抄一抄,那些列出的都不错,我的配置里加上了Java、curl和Wget,方便调试和其它内部项目的抓取。

因为现在很多手机网关没有发送User-Agent,所以大部分手机发送的User-Agent到了网关就被过滤掉了,相当于是空值。经过抽样调查,User-Agent为空且为手机用户比例比较大。有部分User-Agent为空的是一些蜘蛛或垃圾程序的造访,这些垃圾流量并不那么重要。希望手机网关将来有相应的标准,不要发送空的User-Agent,就是发送一个字母也好啊。

如果应用有一个独立域名,也未必要做手机判断。譬如新浪有独立域名且深入人心,那它做不做跳转无关紧要。

nginx配置用穷举方式罗列各类手机User-Agent并把空User-Agent也转到手机应用里,非这些情况,则跳到帮助页面。

set $ismob 0;
if ( $http_user_agent ~ "^((.*MIDP.*)|(.*WAP.*)|(.*UP.Browser.*)|(.*Smartphone.*)|(.*Obigo.*)|(.*Mobile.*)|(.*AU.Browser.*)|(.*wxd.Mms.*)|(.*WxdB.Browser.*)|(.*CLDC.*)|(.*UP.Link.*)|(.*KM.Browser.*)|(.*UCWEB.*)|(.*SEMC\-Browser.*)|(.*Mini.*)|(.*Symbian.*)|(.*Palm.*)|(.*Nokia.*)|(.*Panasonic.*)|(.*MOT\-.*)|(.*SonyEricsson.*)|(.*NEC\-.*)|(.*Alcatel.*)|(.*Ericsson.*)|(.*BENQ.*)|(.*BenQ.*)|(.*Amoisonic.*)|(.*Amoi\-.*)|(.*Capitel.*)|(.*PHILIPS.*)|(.*SAMSUNG.*)|(.*Lenovo.*)|(.*Mitsu.*)|(.*Motorola.*)|(.*SHARP.*)|(.*WAPPER.*)|(.*LG\-.*)|(.*LG/.*)|(.*EG900.*)|(.*CECT.*)|(.*Compal.*)|(.*kejian.*)|(.*Bird.*)|(.*BIRD.*)|(.*G900/V1.0.*)|(.*Arima.*)|(.*CTL.*)|(.*TDG.*)|(.*Daxian.*)|(.*DAXIAN.*)|(.*DBTEL.*)|(.*Eastcom.*)|(.*EASTCOM.*)|(.*PANTECH.*)|(.*Dopod.*)|(.*Haier.*)|(.*HAIER.*)|(.*KONKA.*)|(.*KEJIAN.*)|(.*LENOVO.*)|(.*Soutec.*)|(.*SOUTEC.*)|(.*SAGEM.*)|(.*SEC\-.*)|(.*SED\-.*)|(.*EMOL\-.*)|(.*INNO55.*)|(.*ZTE.*)|(.*iPhone.*)|(.*Android.*)|(.*Windows CE.*)|(Wget.*)|(Java.*)|(curl.*)|(Opera.*))$" )
{
set $ismob 1;
proxy_pass http://m.sudone.com;
}
if ( $http_user_agent ~ ^$ )
{
set $ismob 1;
proxy_pass http://m.sudone.com;
}
if ( $ismob = 0 )
{
rewrite "^.*$" http://help.m.sudone.com/ permanent;
}

2、Content-Type

手机浏览器和普通电脑访问页面有所不同,绝大多数手机不支持text/html这种Content-Type格式。在web服务方面,除了要做出合适手机浏览的页面,另外一个重要的事情就是要把Content-Type弄对了。一般手机使用的是text/vnd.wap.wml和application/xhtml+xml,听说text/vnd.wap.wml是老式手机专用,application/xhtml+xml是3g标准指定的Content-Type,另外charset需要指明为UTF-8。

所以Content-Type就应像如下:

Content-Type: application/xhtml+xml; charset=UTF-8

这样就对了。

对于动态页面,Content-Type可以在程序里设定。

譬如php

header("Content-Type: application/xhtml+xml; charset=UTF-8")

jsp的话,把顶头的page改了就好

动态程序里的设定,到了nginx上默认会继承,所以不用太多考虑。nginx要做的一个是静态页面,另一个是302跳转。

静态页面的Content-Type改起来不麻烦,修改mime.types:

application/xhtml+xml                 html htm shtml;
application/xhtml+xml                 xml;

把需要的扩展名对应的类型改一改就好了。然后在nginx.conf里指定charset UTF-8。

麻烦的是301和302跳转,nginx中使用rewrite的redirect和permanent跳转的时候,Content-Type怎么改都会是text/html,使用add_header,Content-Type变成了两行,没能达成目的。用代理到动态程序固然行,但性能和稳定性又成了问题。最后查阅了nginx源码,发现这个text/html是写死的……

唉,第一次修改c代码:

我调试的这个nginx是0.7.30版的,文件:

vi ./src/http/ngx_http_special_response.c

568             //r->headers_out.content_type_len = sizeof("text/html") - 1;
569             //r->headers_out.content_type.len = sizeof("text/html") - 1;
570             //r->headers_out.content_type.data = (u_char *) "text/html";

把568 569 570这三行代码注释掉,就可以让nginx跳转时不发送Content-Type,我发现在电脑的IE/FF浏览器上没有Content-Type也能正常跳转。

当然,为了严谨一些,写上Content-Type吧,现在可以用add_header定义:

add_header Content-Type "text/html";

手机的就是:

add_header Content-Type "application/xhtml+xml";