Category: 小小草

IT 技术领域学海无涯。其实任何领域都学海无涯,无非 IT 发展太快了,让我有更多嘘唏。希望我掌握的技术有如小小草,虽然渺小,却有旺盛的生命力。

  • Connection speed of sourceforge

    Connection speed of the Godaddy server is generally slower than the 1&1 server. It was test proven from Europe and China. However, when connecting to downloads.sourceforge.net, Godaddy is faster.

    The Godaddy server automatically chooses the mirror site softlayer.dl.sourceforge.net, and the average speed is 8.55M/s. The 1&1 server chooses dfn.dl.sourceforge.net, and the speed is 70K/s. When I force the 1&1 server to download from softlayer.dl.sourceforge.net, the speed does not improve. It is slower even than I download from my PC via ADSL.

    I do not know why there is such a big difference in connection speed from different locations.

  • Gracefully restart Nginx

    Follow these 3 steps to gracefully stop and start Nginx without losing any queries. It works like a charm.

    1. Test new configuration is correct
      nginx -t
    2. Find the Pid
      ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
    3. And kill it. Meanwhile, new configuration is already effective.
      kill -HUP ????
      (replace ???? with the Pid given in step 2)
  • Use Inkscape to open .ai and .cdr files

    Occasionally I need to open .ai (Adobe Illustrator) and .cdr (Coreldraw) files on Fedora, and I found Inkscape is good enough for me. I won’t edit these files so I don’t know Inkscape full capacity.

  • Speed bottleneck of the web server

    非常典型的多层架构:
    第一层 Nginx
    第二层 php fastcgi
    第三层 memcached
    第四层 MySql

    Apache 有个 mod_php,相当于合并了第一层和第二层,Nginx 没有 module for php,这不是什么问题,分层更利于扩展。第三层的加入完全是为了减轻数据库压力,提高性能。目前第2,3,4层之间的优化差不多到极限了(或者说到我能力的极限了),但第1,2层之间尚有潜力可挖。

    not_in_use.php 和 not_in_use.html 都是一个静态文件,没有数据库操作。但 php 文件必须由 Nginx 经由 php fastcgi (使用 unix socket)产生,html 则由 Nginx 直接访问文件系统,就单因素分析,php fastcgi 是普通文件系统速度的34%,所以要想办法绕开 php fastcgi。以下测试在数据中心主机上直接运行 ApacheBench。

    测试一:
    $ ab -kc 100 -n 500 http://magento/not_in_use.php
    This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Copyright 2006 The Apache Software Foundation, http://www.apache.org/

    Benchmarking magento (be patient)
    Completed 100 requests
    Completed 200 requests
    Completed 300 requests
    Completed 400 requests
    Finished 500 requests

    Server Software: nginx/0.6.36
    Server Hostname: magento
    Server Port: 80

    Document Path: /not_in_use.php
    Document Length: 7686 bytes

    Concurrency Level: 100
    Time taken for tests: 0.336355 seconds
    Complete requests: 500
    Failed requests: 0
    Write errors: 0
    Keep-Alive requests: 0
    Total transferred: 4089329 bytes
    HTML transferred: 4004406 bytes
    Requests per second: 1486.52 [#/sec] (mean)
    Time per request: 67.271 [ms] (mean)
    Time per request: 0.673 [ms] (mean, across all concurrent requests)
    Transfer rate: 11871.39 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 11 17.8 3 58
    Processing: 13 49 17.9 50 94
    Waiting: 3 45 18.8 46 88
    Total: 25 60 14.2 61 94

    Percentage of the requests served within a certain time (ms)
    50% 61
    66% 70
    75% 72
    80% 74
    90% 79
    95% 80
    98% 84
    99% 86
    100% 94 (longest request)

    =======================================================
    测试二:
    $ ab -kc 100 -n 500 http://magento/not_in_use.html
    This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Copyright 2006 The Apache Software Foundation, http://www.apache.org/

    Benchmarking magento (be patient)
    Completed 100 requests
    Completed 200 requests
    Completed 300 requests
    Completed 400 requests
    Finished 500 requests

    Server Software: nginx/0.6.36
    Server Hostname: magento
    Server Port: 80

    Document Path: /not_in_use.html
    Document Length: 7686 bytes

    Concurrency Level: 100
    Time taken for tests: 0.115725 seconds
    Complete requests: 500
    Failed requests: 0
    Write errors: 0
    Keep-Alive requests: 500
    Total transferred: 3959000 bytes
    HTML transferred: 3843000 bytes
    Requests per second: 4320.59 [#/sec] (mean)
    Time per request: 23.145 [ms] (mean)
    Time per request: 0.231 [ms] (mean, across all concurrent requests)
    Transfer rate: 33406.78 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 3 7.3 0 22
    Processing: 7 17 4.1 18 23
    Waiting: 7 16 4.0 17 23
    Total: 7 20 9.9 18 41

    Percentage of the requests served within a certain time (ms)
    50% 18
    66% 20
    75% 22
    80% 37
    90% 39
    95% 40
    98% 41
    99% 41
    100% 41 (longest request)

  • Fedora update made my system unbootable

    今天 Fedora 的一个更新后提示我 logout and relogin,结果我 logout 后死机。重启,进度条到100%后还是死机。

    幸好我注意到这个更新是关于 ntfs 的,马上把 /etc/fstab 里我添加的几个条目注释掉,系统又可以启动了。我再细察了/etc/fstab,关于 cifs 的加载,原先写得不是很规范,缺少 sec=none 参数,造成 Fedora 更新后不能启动。

  • Run opentaps as a service

    为了让 Opentaps 在系统启动后自动启动,我在 /etc/rc.d/rc.local 里添了一行

    /path/to/opentaps/startofbiz.sh

    在 Opentaps 1.0.4 版之前用这个方法启动 Opentaps 没发现大的问题,但 1.0.4 版运行 startofbiz.sh 的当前目录必须为 opentaps 的目录,不能再用上述办法启用 Opentaps。再说上述办法并不是正统的以 service 运行 Opentaps,所以我又重新寻找一个能让 Opentaps 自启动的办法。其实也很简单:

    1. 适当编辑 rc.ofbiz 的参数 (rc.ofbiz 似乎是在 DOS 下写就的,我用了一次 dos2unix 才让它运行起来)
    2. cp /path/to/opentaps/rc.ofbiz /etc/init.d/ofbiz
    3. chmod 755 /etc/init.d/ofbiz
    4. chkconfig --add ofbiz
    5. chkconfig --level 235 ofbiz on
    6. service ofbiz start
  • Tough Parallels Plesk

    Parallels Plesk 对我来说是鸡肋。1&1 送了这玩意一年的许用证,一年以后我还用 1&1 吗?我如果用了 Parallels Plesk 就怕象吃鸦片上瘾,以后如果离开 1&1,别人家如果不送 Parallels Plesk 就要花钱买,那时我会觉得很懊恼。

    1&1 既然送了 Parallels Plesk,我也在 Parallels Plesk Panel 里转了一圈,觉得它算是一款好的商业软件,只不过不对我的胃口罢了。正因为如此,我没删 Parallels Plesk,只是将 psa service 停止了。

    如此相安无事过了几个星期,今天突然发现 opentaps 不能启动了。一查,8443 端口被占用了,我马上想到是 Parallels Plesk 又复活了,难道 psa 还有一个守护进程?Parallels Plesk 这么设计大概为了保证 Panel 的 up time,但有点病毒作风,再加我也搞不清它的机理,看来要把它删了一了百了。

  • Broadcom wlan driver for linux

    我的 Compaq V6133eu 集成的是 Broadcom bcm4322 无线网卡。Compaq V6133eu 安装了 Fedora 11 以后,就是这个无线网卡不能工作。HP 和 Broadcom 对 linux 用户支持都不到位,HP 那儿找不到 Broadcom wlan driver for linux,Broadcom 把 Broadcom wlan driver for linux 隐藏得很深,我搜了 N 次以后才找到。我嫌安装步骤过于繁琐,踌躇着还没动手,这时 Fodera 提示我 Firmware update。难道是 Fedora 刚刚增加了 Broadcom wlan driver for linux?Firmware update 后重启,无线网卡已经开始工作了,省却我手动安装的繁琐。

  • I love Webmin & Virtualmin

    用过 Webmin 和 Virtualmin 以后,我觉得这个组合最适合我管理主机了,有了 Webmin 和 Virtualmin,根本就用不着 cPanel 或 Plesk。

    Virtualmin GPL 的官方说不支持 Fedora,可它已经跑在我的 Fedora 11 上了。我的经验是在 Fedora 上 用 install.sh 来安装 Virtualmin GPL 确实会出现错误无法进行下去。错误提示是:

    error: open of
    error: open of HTML failed: No such file or directory
    error: open of PUBLIC failed: No such file or directory

    但换个方式安装 Virtualmin GPL 就成功了—— 登录 Webmin,在 Webmin Configuration -> Webmin Modules 里以安装 Module 的方式上传 virtual-server-3.703.gpl.wbm.gz。非常的简单!

    Webmin 还解决我在 CentOS 的一个老大难问题——之前我一直未能成功地在 CentOS 上安装 CPAN FCGI。在 Webmin 里找到安装 perl CPAN module 的界面,输入模块名称 FCGI,一下子就装好了。感觉非常的幸福!

  • Mount FTP file system on CentOS

    有了 SFTP 以后,FTP 几乎没有用武之地了,研究 FTP 大多是因为某些软件或服务器只支持 FTP。

    1&1 独立主机附赠一个跟硬盘容量相等的 FTP 备份空间,此 FTP 只能由 root server 访问,但 1&1 并没有提供现成的备份软件(1&1 营销上的失误)。FTP 备份空间对我来说用处不大,但 250 G 的空间空着也是浪费,于是我自创了我的备份方案,此中关键点是如何在 CentOS 上加载 FTP 文件系统。

    经一番搜索,找到 curlftpfs,用它可以加载 FTP 文件系统,但 Fedora 可以直接 yum install curlftpfs,CentOS 里没有,得用 DAG repository,所以第一步:安装 DAG repository。

    rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

    第二步:安装 curlftpfs

    yum install curlftpfs

    第三步:没有第三步,已经可以使用 curlftps 了。如果要加载 FTP 文件系统

    curlftpfs ftp://ftp_host/sub_dir mount_point -o user="ftp_username:ftp_password", uid=user_id, gid=group_id, allow_other

    如果在启动时自动加载 FTP 文件系统,在 /etc/fstab 中添加一行

    curlftpfs#ftp_uername:ftp_password@ftp_host/sub_dir mount_point fuse rw,uid=user_id, gid=group_id,user,allow_other 0 0
    (很多关于 curlftpfs in fstab 的介绍使用了 noauto,这样的话,还需执行 mount mount_point 才能真正加载)

    卸载 FTP 文件系统

    fusermount -u mount_point