linode vps 国内访问速度测试:机房测速

注意:本文内容仅供参考,测得数据并没有广泛的代表性。测试结论参看文后总结。

今天凌晨0点买了个linode的 512vps,久闻其最近日本机房质量严重下降——我指的是在本朝大局域网内访问的速度——有点不是太相信,想亲自测试一下;以后把站点迁移上去之后就不方便这么折腾了。

于是点选了Tokyo JP,ssh连接上去看了看,一个很空的系统,大概是最小化安装的,还是这种环境好,没有乱七八糟的东西,想装什么装什么,省心。太困了,于是睡觉。

起床后开始折腾:

时间:2012-06-09 10:00

安装apache ,在web目录里 wget -r http://blog.path8.net ,搞一点文件,用来测试一下页面打开速度。wget太慢,运行了一两分钟,Ctrl+C中止掉;浏览器打开测试页面,通过firebug的网络检测功能查看,速度跟burstNet vps差不多,甚至更慢。

vps上 wget上去一个linux kernel的bz2包,这可是真正的高压缩文件,测试网速时最喜欢用它了! 在vps上wget,速度基本上在300-500K左右,最高也没超过700K。

这么来看,linode 日本东京机房的网络速度果然不很快。

网上找比较linode几个数据中心的速度方面的文章,都比较老,通过搜索得知linode library中(http://library.linode.com/getting-started#sph_selecting-a-data-center)提供的有测速的链接 http://www.linode.com/speedtest/

============= 这几个测速链接如下: ===================

Use this information to determine the best location for your Linode.

Facility Hostname Test Download
Tokyo, JP speedtest.tokyo.linode.com 100MB-tokyo.bin
London, UK speedtest.london.linode.com 100MB-london.bin
Newark, NJ speedtest.newark.linode.com 100MB-newark.bin
Atlanta, GA speedtest.atlanta.linode.com 100MB-atlanta.bin
Dallas, TX speedtest.dallas.linode.com 100MB-dallas.bin
Fremont, CA speedtest.fremont.linode.com 100MB-fremont.bin

========================================================

上网环境为 中国电信光纤宽带,使用firefox下载一个测试文件1分钟左右,然后断开,再下载下一个。

测速结果大致如下:

数据中心 粗测速度(KB/s)

Tokyo, JP 150~210

London, UK 400~700

Newark, NJ 200~220

Atlanta, GA 400~500

Dallas, TX 400~800

Fremont, CA 100~120

因为正好是美国的夜间,而是日本的白天,这点也会影响实际结果。

换个时间再测一下速度,以使结果更具代表性

12:30再次测试,使用wget 命令,仍下载一部分,加上两个参数:wget第一次显示的速度值,wget第一条日志记录中显示值

数据中心 前10秒平均速度 第一次显示速度 第一条记录中速度

Tokyo, JP 35 (35~26) 33 35

London, UK 400 (220~600) 33 193

Newark, NJ 120 (156~80) 30 156

Atlanta, GA 400 (260~560) 42 289

Dallas, TX 600 (480~900) 49 389

Fremont, CA 140 (120~260) 61 138

总结:

Atlanta, GA 与 Dallas, TX 表现最佳,另外 London, UK 也不错,这点之前是没有想到。

----------------------------------

不过就实际有使用情况来看,在国内访问Dallas, TX机房的网络速度很慢,ping值在几个机房中是最高的,web访问起来,跟burst速度差不多,根本没有体现出linode的形象来。经过一天的使用,请求客服换到Fremont, CA ,使用这个据说有些悲摧的机房,一段时间看看情况再说,看是是真的有带宽拥挤而抽风等情况。据说Atlanta, GA 机房在国内访问也是不错的,不过没有试用。

目前本站vps就是在Fremont, CA机房,速度尚可。

----------------------------------

另外,顺便扯一点:

有不少主机商提供的测速都是做过手脚的:他们提供的文件其实是内容高度重复的文件,甚至是整个文件里都是同一个字符,这样的文件,通过http协议下载时,会自动压缩传递的。所以他们的主机:测速链接的文件下载速度超级的快,但用时时候慢得要死。

而linode的测速文件下载下来后,使用zip、bz2压缩,文件大小都没有减小,也就是说他们提供的测速文件还是很专业的,至少在测速方面,他们根本没有想骗用户。

----------------------------

后记:本文是很早写的。2014年的某天本站已迁移到linode日本,当时网络质量还是不错的,丢包率通常在2%以内。然而在2015年,上海电信连接海外网络质量严重bug,丢包暴增,linode日本平均丢包20-30%;cnn, apple, ms等网站在上海电信丢包率也好不了哪里。所以,网络质量这东西,是动态的,老文章的数据,参考意义不大。

mysql修改配置参数innodb_log_file_size后不能正常工作,在phpmyadmin中innodb表状态为“使用中”

问题:修改mysql配置参数innodb_log_file_size 后,可能无法正常启用,或者innodb表将不能工作,在phpmyadmin中显示为“使用中”

解决方法:先停掉mysql,然后删掉旧innodb日志文件后,再启动mysqld就可以正常启用了.innodb旧日志文件位于mysql data 目录下的ib_logfile0, ib_logfile1 文件

innodb日志文件在linux下的典型位置为 /var/lib/mysql
在windows下则默认位于安装目录下的data子目录里。

原因:是旧的innodb日志文件,与改后的innodb_log_file_size不匹配,所以造成mysql不能正常工作。

redhat/centos 6 linux下mkinitrd 生成initramfs.img文件过大原因及dracut使用

centos 6下自己编译linux内核,完了创建initrd文件,依据以前的的经验mkinitrd

#mkinitrd -v ../initramfs-3.0.32.img 3.0.32

但是输出的消息却与以前的版本不太一样,好像打包进去了很多模块,生成花费时间也很长,完成后,看initramfs文件有100多M,OMG,这么大的文件 /boot目录可放不下(/boot挂在单独的分区下,该分区只有100M大小)。

经过N久的折腾,才发现原来redhat/centos6不再使用原来的mkinitrd,而是使用dracut代替了,mkinitrd实际上只是调用dracut的功能。研究dracut才弄明白,如果只是生成用于grub引导本地硬盘上的linux,需要使用一个参数--hostonly ,这样dracut就不会把过多不必要的模块加载到initramfs.img里,如下

dracut -f -v --hostonly -k '/lib/modules/3.0.32'  ../initramfs-3.0.32.img 3.0.32

这是通过查阅kernel 编译安装的 make install 使用是执行的以下脚本实现的:
sh /path/to/kernel-source/linux-3.0.32/arch/x86/boot/install.sh 3.0.32 arch/x86/boot/bzImage System.map "/boot"

查阅arch/x86/boot/install.sh 文件, 它调用/sbin/installkernel ,然后是/sbin/new-kernel-pkg ,接着是/sbin/dracut

通过分析 /sbin/new-kernel-pkg ,其中290行有如下代码

    if [ -n "$dracut" ]; then
        tool="/sbin/dracut $dracuthostonly -f $initrdfile $version"
    else
    tool="/sbin/mkinitrd --allow-missing -f $initrdfile $version"
    fi

其中变量$dracuthostonly的值是 -H ,在dracut参数里与 --hostonly 同义。

问题至此得解。

apache下对目录开启反向代理

需求:有一个apache站点foobar.mysite.net,其中一个目录里的文件与另一站点的某目录内容完全一致。假设该目录为/php, 是一套php程序,因为它使用了cookie,但cookie不能跨域,所以要分别部署在这两个站点下。这里可以通过反向代理,使对站点http://foobar.mysite.net/php/***的访问实际由http://www.mysite.net/php/***处理。

采用如下的设置,相关代码已经加粗着色(如没有着色,请到这里http://blog.path8.net/archives/5989.html阅读)。其中

<VirtualHost *:80>
    DocumentRoot "/var/www/html/vhosts/foobar.mysite.net/html"
    ServerName foobar.mysite.net
    <IfModule mod_php5.c>
        php_admin_value open_basedir "/var/www/html/vhosts/foobar.mysite.net/html/:/tmp"
    </IfModule>
    ProxyPass /php http://www.mysite.net/php  
    ProxypassReverse /php http://www.mysite.net/php 
    ProxypassReverseCookieDomain www.mysite.net foobar.mysite.net
</VirtualHost>

看参考,对指定目录设置反向代理也是可以的,但没有成功,不知哪里有错误,还请高手指教,配置如下。

#<Directory "/var/www/html/vhosts/foobar.mysite.net/html/php">
#    ProxyPass http://www.mysite.net/php
#    ProxypassReverse http://www.mysite.net/php
#    ProxypassReverseCookieDomain www.mysite.net foobar.mysite.net
#    ProxypassReverseCookiePath /php /php
#</Directory>

 

apache代理模块mod_proxy_html,修改html页面内容的url引用链接

参看apache参考手册proxy相关章节时,无意中发现apche有一个模块,可以实现修改代理页面html里的url引用链接,这正是之前想的一个功能,还真的有。apache实在太全面而强大了。

http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_proxy.html#proxypassreverse

apache中有一个第三方模块可以检查并改写HTML中的URL引用,该模块就是Nick Kew编写的mod_proxy_html

http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_proxy.html#proxypassreverse

nginx 1.2.0启用gzip http压缩手记

本站的web在vps上的nginx里跑,之前为简单其见,没有配置http gzip压缩支持,但vps有时网络抽风而速度很慢,于是想起来配置gzip压缩支持。

网上有很多nginx启用gzip压缩的文章,但还是上官方看文档是最权威准确的。这两个页面:

http://wiki.nginx.org/HttpGzipModule
http://wiki.nginx.org/NginxHttpGzipStaticModule

nginx官方文档很易懂,先给一个典型的配置实例,下面再详讲每条指令,感觉相当亲切。

查看ngix编译参考,是否启用了gzip模块,运行命令:

/path/to/binary/nginx -V
(我的nginx在PATH目录里,故命令中可以省略nginx所在的目录),写为nginx -t 即可,下文从略写

注意其中是否 --with-http_gzip_static_module,如果没有,那就自己编译一次吧,下面是我的配置参数,供参考。最后的--add-module=../nginx-lib/nginx-upload-progress-module-v0.9.0/是nginx上传进度模块,nginx第三方模块,源码放置在../nginx-lib/nginx-upload-progress-module-v0.9.0目录,如果你没有下载过该模块,去掉它就可以了。

nginx version: nginx/1.2.0
configure arguments: --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/conf/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_stub_status_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_random_index_module --with-cpu-opt=pentium4 --add-module=../nginx-lib/nginx-upload-progress-module-v0.9.0/

修改nginx配置文件,nginx配置文件目录参看nginx配置参数里的--conf-path。按我的配置,修改/usr/local/conf/nginx/nginx.conf,在http节点加入gzip配置即可。

    gzip_static on;
    gzip_http_version 1.1;
    gzip_proxied expired no-cache no-store private auth;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;

    gzip on;
    gzip_min_length 1000;
    gzip_types text/plain application/xml text/css text/javascript text/xml;

测试配置是否有语法错误

nginx -t

输出消息

nginx: the configuration file /usr/local/conf/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/conf/nginx/nginx.conf test is successful

确认无误,重新加载nginx配置

nginx -s reload

检测gzip压缩是否正常工作,使用live http headers ——firefox的一款插件,看http头是是否有这样一行:Content-Encoding: gzip

也可以使用firefox的firebug插件 的“网络”功能看,或者使用第三方的在线检测工具,如http://tool.chinaz.com/Gzips/

简单命令对mysql数据库的备份与还原

使用phpMyAdmin备份mysql数据库

备份mysql的最简单方法是的使用phpMyAdmin的“导出”功能,导出成sql文件,不用管其它选项,只管导出就可以,这就是mysql标准的备份文件。

导出时,一般不要勾选压缩选项。因为如果备份文件大到一定程度,就会因为php分配不到足够内存而死掉;经验是50M以上的表,就不要压缩了。这是个蛋疼的事情:小文件不值得压缩,大了反而压缩不动。所以不压缩就是了。

还原mysql数据库

要还原mysql数据库时,使用phpMyAdmin是个简单的方法,但更容易因为备份文件过大而超过php内存限制而死掉,这时你会有种痛不欲生的感觉。

推荐使用命令行连接mysql,以source命令导入还原,这个导入过程是件愉悦的事情。

不幸的是如果你在windows下,会比较啰嗦:

把你的mysql备份文件放到一个比较浅的目录里,比如放在 E:\120507.sql ,你要还原的数据库叫mydata

找到你的mysql安装在哪里,假如你的mysql安装在D:\Program Files\MySQL\MySQL Server 5.0 ,那么你的mysql命令行客户端将位于D:\Program Files\MySQL\MySQL Server 5.0\bin ,按着按下面的步骤来:

  • 1. 开始-运行,输入cmd,确定,你将进入命令行界面
  • 2. 输入 d: 然后回车,进入D盘
  • 3. 输入cd "D:\Program Files\MySQL\MySQL Server 5.0\bin" 再回车(注意,如果路径中有空格,那引号是必须的)
  • 4. 输入mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384 回车(假设你的mysql的root用户密码是123456, 注意,这里u与p后面带不带空格都可以,我习惯不带; 你只需改这行命令里的密码部分,其它不需要改变,照用即可)
  • 你将看到

    注意到光标闪烁处的mysql> ,这就说明已经成功连接到本机的mysql数据库。
  • 输入use mydata 回车 ,进入mydata数据库
  • 输入source E:\120507.sql 回车,你将看到一行行快速滚动的信息。滚动完毕就导入完成了。
  • 输入exit驾车即可。回到phpmyadmin里看导入的结果吧.

核心回顾

mysql备份,使用phpMyAdmin,导出需要的表,或整个数据库,注意最好不要勾选压缩

还原,使用命令行客户端连上mysql服务器,mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384,然后use mydata进入需要还原的数据库,运行source x:\bakup_file.sql 导入备份。

linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)

linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,acl是一个好东西,有了它可以很完美且优雅的控制目录权限。acl的基础知识,这里不再详述,有兴趣可以参看此文(通过实践学习linux ACL基本用法/Linux ACL 体验)

一个很可能遇到的实际问题:

linux下的web站点,该站点开启ftp上传下载;web与ftp以不同的用户运行,分别是web, ftp.

该目录 ./html 结构大致如下

(shell当前目录为/var/www/html, 下同)

$ls
drwxr-xr-x 2 root root 4.0K May  7 07:51 admin
drwxr-xr-x 2 root root 4.0K May  7 07:51 image
drwxr-xr-x 2 root root 4.0K May  7 07:51 lib
drwxrwxrwx 2 root root 4.0K May  7 07:51 upload
-rw-r--r-- 1 root root    0 May  7 07:52 index.php
-rw-r--r-- 1 root root    0 May  7 07:52 config.inc.php

为了web的安全其见,其中

upload目录为web后台上传文件的目录,权限为777;其它文件(目录)权限755(这里使用555也是可以的)

这样web是安全了,但问题也来了

ftp用户就没有写入权限了,将无法通过ftp修改web程序。

如果能实现以下这样的功能就好了:

web用户还是以上权限,不多赋权;但ftp用户可以对这里的所有目录、子目录(及其中文件)都有完全的权限

这种情况下,就要派acl上场了。

对于web用户的权限,保持不变。而针对ftp用户设置几条acl规则:

setfacl -R -m u:ftp:rwx .

大意是,对当前目录 . 递归设置acl规则 u:ftp:rwx ,
u:ftp:rwx这条规则是针对指定用户设定的(u);该用户名为ftp; 权限规则是rwx

翻译成人类语言就是说:给当前目录及其子目录、文件设置acl规则,让用户ftp拥有完全权限。

太简单了,这样就完成搞定了!

差不多了,不过这里还有一个问题,对于以后新建的目录里,ftp用户可能并没有rwx权限,这是为什么呢?因为对于新建目录,它并没有相应的acl规则,而是沿用022的默认umask, 结果就是新文件的755权限。

这里就要用默认acl来实现,简单说来,就是让新建的目录,都自动继承一个默认的acl规则,让ftp用户拥有rwx权限。

setfacl -R -d --set u:ftp:rwx .

还是一条设置acl的命令(setacl); -R 是递归执行,这很简单。重点在 -d --set u:ftp:rwx 上。 -d,指后面是一条default acl规则,规则是  --set u:ftp:rwx, 对当前目录 . 设置规则

用人类的语言讲,就是让所有新建目录都对ftp用户设置rwx的默认权限。

就这样,设置完了。相当简单吧?

回过头来,再看看上面对upload目录设置777的权限,似乎也不并不怎么完美,是不是也可能通过acl规则让web用户拥有rwx的权限?当然可以,其实更好,因为这里的文件是web用户自己创建的,里面的文件所有者应该是web用户,777权限似乎高了点;而且如果这是从其它服务器上迁移过来的站点的话,这些文件的所有者可能还会比较乱。

另外,默认acl,只对以后的新建目录有效,而对已有文件,它并不改变其acl,所以,要同时使用上面所述的两个命令,对已有文件(setfacl -R -m u:ftp:rwx .)和以后的新建目录(setfacl -R -d --set u:ftp:rwx .)设置acl.

上面的acl是针对一个用户web设定的,还可以对一个用户组来设置 g:group_name:rwx , 这样对多用户协作状态下会比较有用。

一段apache虚拟主机的配置代码

一段apache虚拟主机的配置代码,包括了对部分目录禁用php解析,apache日志目录等

### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /var/www/html/defsite
#    ServerName unknown-host.example.com
ErrorLog logs/defsite-host.example.com-error_log
CustomLog logs/defsit-host.example.com-access_log common

#    <IfModule mod_php5.c>
#        php_admin_value open_basedir "/var/www/html/vhosts/testsite/html/:/tmp"
#    </IfModule>
#
#    <IfModule suexec.c>
#        SuexecUserGroup web_testsite web_testsite
#    </IfModule>
</VirtualHost>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/testsite/html"
ServerName www.testsite.com
ServerAlias job.mysite.com
ErrorLog "logs/testsite-error.log"
CustomLog "logs/testsite-access.log" common
<IfModule mod_php5.c>
php_admin_value open_basedir "/var/www/html/vhosts/testsite/html/:/tmp"
</IfModule>
RewriteLog "/var/www/html/vhosts/testsite/log/rewritelog.log"
</VirtualHost>
<Directory "/var/www/html/vhosts/testsite/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all

#AllowOverride AuthConfig  #this line and below is required to auth,
#  AllowOverride has been configured above, no need to re configure
#    AuthName web_testsite
#    AuthType Basic
#    AuthUserFile /var/www/htpasswd/testsite.htpasswd
#    require valid-user
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/images">
AllowOverride None
Options FollowSymLinks
Order allow,deny
php_admin_flag engine off
Allow from all
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/css">
AllowOverride None
php_admin_flag engine off
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/data">
AllowOverride None
php_admin_flag engine off
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/js">
AllowOverride None
php_admin_flag engine off
</Directory>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/www2.mysite.com/html"
ServerName www2.mysite.com
ServerAlias job2.mysite.com
ErrorLog "logs/www2.mysite.com-error.log"
CustomLog "logs/www2.mysite.com-access.log" common
</VirtualHost>
<Directory "/var/www/html/vhosts/www2.mysite.com/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/z.mysite.com/html"
ServerName z.mysite.com
ErrorLog "logs/z.mysite.com-error.log"
CustomLog "logs/z.mysite.com-access.log" common
</VirtualHost>
<Directory "/var/www/html/vhosts/z.mysite.com/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/bbs.mysite.net/html"
ServerName bbs.mysite.com
ErrorLog "logs/bbs.mysite.net-error.log"
CustomLog "logs/bbs.mysite.net-access.log" common
</VirtualHost>
<Directory "/var/www/html/vhosts/bbs.mysite.net/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

centos 6.x下的empathy安装包/rpm

直接上安装包

empathy-2.30_rpm_for_centos_f13

fedora13的二进制包,可以在centos 6.2下成功安装,并正常使用。这些包之间解决了包信赖,应该不再需要其它包;如果真的缺少了某个包,请通过yum 安装。

如果你的centos6安装有pidgin,推荐卸载掉,因为有个rpm包与centos6带的pidgin有冲突。

对于使用QQ的朋友,推荐下载安装这个 https://code.google.com/p/libqq-pidgin/ ,empathy/pidgin自带的QQ协议老了,而不再被tx支持。

Pages: Prev 1 2 3 4 5 6 7 8 9 10 ... 12 13 14 Next