Archive for 05月, 2009

FTP上传、下载单个大于2G文件限制的真相

FTP传输容量没有2G限制,2G限制是FS的问题。
你一次性传10个1G文件没事,但传1个超过2G的就不行了,关键问题是FS的问题。这是windows下的FS参考资料:
文件系统 文件大小限制
FAT12 最大支持8M
FAT16 最大支持2G
FAT32 [...]


在linux下安装Siege进行压力模拟测试

Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
下载:
wget ftp://sid.joedog.org/pub/siege/siege-latest.tar.gz
安装:
%./configure ; make
#make install
siege包含了一组压力测试工具:
SIEGE (1) Siege是一个HTTP压力测试和评测工具.
使用样例:
任务列表:www.murray.cn.url文件
http://www.murray.cn/tech/
http://www..murray.cn/tech/acdsee.html
….
siege -c 20 -r 2 -f www.murray.cn.url
参数说明:
-c 20 并发20个用户
-r 2 重复循环2次
-f www.murray.cn.url 任务列表:URL列表
输出样例:
** Siege 2.59
** Preparing 20 concurrent users for battle. 这次“战斗”准备了20个并发用户
The server is now under siege.. done. 服务在“围攻”测试中:
Transactions: 40 hits 完成40次处理
Availability: 100.00 % 成功率
Elapsed time: 7.67 secs 总共用时
Data transferred: 877340 bytes 共数据传输:877340字节
Response time: 1.65 secs 相应用时1.65秒:显示网络连接的速度
Transaction rate: 5.22 [...]


PHP正则相关的几个preg函数

preg_match: 字符串比对解析。
preg_match_all: 字符串整体比对解析。
preg_replace: 字符串比对解析并取代。
preg_split: 将字符串依指定的规则切开。
preg_match字符串比对解析
语法: int preg_match(string pattern, string subject, array [matches]);
返回值: 整数/数组
内容说明: 本函数以 pattern 的规则来解析比对字符串 subject。比对结果返回的值放在数组参数 matches 之中,matches[0] 内容就是原字符串 subject、matches[1] 为第一个合乎规则的字符串、matches[2] 就是第二个合乎规则的字符串,余类推。若省略参数 matches,则只是单纯地比对,找到则返回值为 true。
preg_match_all字符串整体比对解析
语法: int preg_match_all(string pattern, string subject, array matches, int [order]);
返回值: 整数
内容说明: 本函数以 pattern 的规则来整体解析比对字符串 subject。比对结果返回的值放在数组参数 matches 之中,并依顺序值 order 排序。参数 order 的值有 PREG_PATTERN_ORDER 及 PREG_SET_ORDER 二种。若没有 order 值,则系统自动以 PREG_PATTERN_ORDER 代入 order 值中。返回值为合乎比对结果的数目,若没有或错误则返回 [...]


mysql中my.ini的优化参数

1)、back_log:
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。
(2)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。
(3)、key_buffer_size:
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为402649088(400MB)。
(4)、max_connections:
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。
(5)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)
(6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。
(7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。
(8)、thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。
(10)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。


WINDOWS下mysql服务器出现大量unauthenticated user的解决办法

当我们对mysql进行show processlist查看时,出现大量unauthenticated user,并导致mysql的连接数太大。
原因不用多讲,不管连结的的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查。mysqld 会尝试去反查 IP -> dns ,由于反查解析过慢,无法应付快速多量的查询。这就是为什么会有这么多unauthenticated user。
解决办法:修改my.ini文件,在 [mysqld] 行下添加  –skip-name-resolve ,重新启动mysql服务
格式如下:
[mysqld]
–skip-name-resolve
注:网上答案有太多时linux下my.cnf的办法,虽然大同小异,但还是让我们这些菜鸟不敢尝试,现在公布windows下的具体格式,希望有所帮助


Flash 与深度(Z轴)有关全局函数或方法

方法
全局函数
功能描述
返回值

MovieClip.attachMovie()

从库中创建一个电影剪辑实例。
被创建的电影剪辑的引用

MovieClip.createEmptyMovieClip()

创建一个空的电影剪辑
被创建的电影剪辑的引用

MovieClip.createTextField()

创建一个文本框
无返回值

MovieClip.duplicateMovieClip()
duplicateMovieClip()
创建一个电影剪辑的拷贝
被创建的电影剪辑的引用

Button.getDepth()

返回电影剪辑、按钮、文本框的深度
深度数值

MovieClip.getInstanceAtDepth()

返回占据指定深度的电影剪辑
指定深度下电影剪辑的引用

MovieClip.getNextHighestDepth()

返回最高的可用深度
深度数值

MovieClip.removeMovieClip()
removeMovieClip()
移除动态创建的电影剪辑
无返回值

MovieClip.swapDepths()

交换两个电影剪辑的深度
无返回值

MovieClip.swapDepths()

交换两个电影剪辑的深度
无返回值

另外DepthManager是一个专门对深度进行管理的类,利用它的方法我们可以管理任何组件或影片剪辑的深度(包括 _root)分配。把它的方法一起列出,在这里要大家有个了解,现在不要求你去掌握的。

方法
描述

DepthManager.createChildAtDepth()
在指定深度处创建指定元件的子级。

DepthManager.createClassChildAtDepth()
在指定深度处创建指定元件的子级。

DepthManager.createClassObjectAtDepth()
在特殊最深剪辑中的指定深度处创建指定类的实例。

DepthManager.createObjectAtDepth()
在最深剪辑中的指定深度处创建一个对象。

DepthManager.setDepthAbove()
将深度设置到指定实例之上。

DepthManager.setDepthBelow()
将深度设置到指定实例之下。

DepthManager.setDepthTo()
将深度设置为最深剪辑中的指定实例。


FLASH对象深度(Z轴)-初探

Flash中的对象除了在平面上的坐标位置外,另外还有个立体的Z轴,那就是对象的深度。
深度具体就是些数字,比如1、2、3、100000…。Flash中用这些数字来表示当前对象的层叠位置。
控制对象的深度,一是通过拖动图层的上下关系,二是通过在同一图层上多个对象的排列层次的改变。
深度值大的靠前,深度值小的靠后。深度大的会遮盖住深度小的对象。 影片剪辑的深度值的范围是从 -16384 到 1048575。
时间轴区(-16384 到 -1)主要用于放置Flash 编辑时的对象,且对象不可用脚本移除。
动态区(0到1048575)实现运行时的动态创建、动态访问和动态移除
这个区是我们最需要的,也是我们可以通过as可以控制的。大家看这个区是从0开始的,符合我们的习惯吧,所以在这个区域可以放置那些可以动态创建和移除的对象。这里是你开发的自由区,如果在时间轴区的对象,你可以先进行交换深度到这里,然后你想怎么做都可以了,杀了它也是允许的了。
扩展区(1048576到2130690045)实现运行时的动态创建、动态访问,但不支持使用脚本移除对象。