2008年1月14日星期一

mysql内存使用与优化-myisam

凌晨,一台mysql(全部是myisam表)出现了内存不足!
Out of memory; restart server and try again (needed 67108856 bytes)

Got error 12 from storage engine

[ERROR] Got error 12 when reading table './****/baby'

很明显,该台mysql关于内存设置偏高,导致mysql请求分配内存失败!特别是每连接独享的内存设置存在问题,当连接数过多时,内存会相当稀缺!而myisam的cache是使用的文件系统本身的cache,所以内存不足将导致性能急剧下降。
先了解对于myisam我们需要调节的几个跟内存相关的参数!
所有连接共享的参数
1 key_buffer_size
这个肯定都知道,索引区大小
2 query_cache_size
查询缓存区大小
每连接独享的参数
3 join_buffer_size
在不使用索引的情况下,用于完全联接的缓冲区的大小!
4 read_buffer_size
读每个表里面连续的一块东西使用的缓存区大小
5 read_rnd_buffer_size
对已经排序了的结果直接读取,避免从disk读取
6 sort_buffer_size
排序空间大小
7 thread_stack
默认的已经足够大192K
8 binlog_cache_size
这个我用的很少,具体见手册
上面每连接独享的参数,一定要注意!如果修改不当,将导致mysql内存不足,偷鸡不成,反赊把米!
基本内存估算就是
全局内存=key_buffer_size+query_cache_size
每连接独享内存=sort_buffer_size+read_buffer_size+read_rnd_buffer_size+join+buffer_size
+上面的7和8(很少用)
所以使用的最大内存=全局内存+每连接独享内存*连接总数(max_connections)

2008年1月11日星期五

apache防webdup

2008年某天一大早来公司,查看流量表,发现凌晨一点的时候流量有些偏大!看日志发现,有人用webdup来抓cms!
想想,cms被小偷程序抓也不是一次两次了!本以为,这些小偷程序改个User-agent,我也不太好防!可令人气愤的是,在国内,这些小偷爬人家的站,User-agent都不愿意改下!
索性我也来个防菜鸟不防高手了,参考手册rewrite
写下下面小段的rewrite:
RewriteCond %{HTTP_USER_AGENT} ^Webdup.* [NC]
RewriteRule ^.* - [F,L]

稍微注释下:flag中的 [NC](No Case) 忽略大小写
[F] (force URL to be Forbidden) 给个403,静止入内:)
[L] (last rule) 应用了这条ReriteRule直接跳出,不在理会下面的rewrite了。
国内这种抓的气氛太浓了,不单只在内容上,在项目本身设计上也是这样,导致很多网站相似性太高!从内容本身很难去拉开于同类网站的差距,在国内创意变得不再是最最重要的创业基础,你的项目有创意,好的前景,人家照样插。从blog在国内的发展我们就能看出端倪。在短时间内做大做强,做出用户,做出品牌!

2008年1月9日星期三

apache配置-Sections

在配置apache的时候,我们经常需要对同一个虚拟主机下面的不同目录,不同的url,不同的文件做不同的配置。
常见的需求是首页的max-age=90,但是内页的max-age=9000或者更常,而内页可能体现在不同的目录,或者在同一目录下面只是不同的url.
所以我们需要把他们分开进行配置,我们能使用的指令有Directory
Directorymatch
files
filesmatch
href="http://httpd.apache.org/docs/2.0/mod/core.html#location">location
locationmatch
proxy
proxymatch
从头到尾,这些都是所谓的容器!可能让我们根据特性把集合分开!

linux系统命令 vmstat

经常使用vmstat来查看系统的运行状况,实际上却还是有些细节被我忽略了!
今天正好兴起,就一次性弄清楚!
Procs
r: The number of processes waiting for run time.
b: The number of processes in uninterruptible sleep.
我们经常会看见r的数值比较大,也很明显的知道等待运行的进程比较多,
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
内存使用情况的说明,和free显示的内容是一样的
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
交换区的使用情况
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
对物理块的读写速率
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second
in是中断次数/秒,cs是做上下文交换的次数/秒
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero.
cpu的使用率,id为空闲cpu,wa为等待磁盘io的使用率!wa过高的话,说明磁盘io存在一定的瓶颈.
发现以前学的操作系统好像在这里找到了些影子.

2008年1月6日星期日

squid3.0-STABLE1出炉

一直对squid情有独钟,也许是因为它maillist上面的热闹,也许他是我第一个深入了解的开源项目。也许也正是因为squid让我对http协议有了更深的了解。
总之在varnish昙花一现以后,squid3.0给出了第一个稳定版!squid2.6也给出了第17个稳定版
3.0与2.6之间具体差别,我还没来得及细细比较,
大体是增加了
# Code converted to C++, with significant internal restructuring and rewrites.
(用c++重构并改写了代码)
# ICAP implementation (RFC 3507 and www.icap-forum.org)
# Edge Side Includes (ESI) implementation (www.esi.org)
(实现了两个协议)
遗憾的是本来在2.6中实现了的follow_x_forwarded_for,在3.0中暂时还没有实现!
  

2008年1月3日星期四

apache模块之include_module

今天帮同事在测试机上添加下Server-Side Includes的支持!郁闷了一小时,愣是没有弄起来,测试机上是用的xmapp套件!对xmapp不熟悉,捣鼓了好一阵,还是没有搞定!
要找时间彻底把它搞定!
先理一下大体的思路吧!
Server-Side Includes(简称ssi)
手册上面的命令如下
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

在你需要进行ssi解析的里面添加
Options +Includes

当然和平常的指令一样,如果这些指令每授权给了.htaccess,可以在.htaccess里面设置
在手册的下面添加了一段

AddHandler server-parsed .shtml

apache会启动INCLUDES 链对能和MIME类型为text/x-server-parsed-html的文件
中间有需要了解的Filter,Handler!
在测试机上最后添加了AddHandler server-parsed .shtml才搞定!
但是为什么只是添加在输出链中在测试机上不鼎,在生产机上却是可以的!中间有什么样的不同了!
先记录在这里:),以后再深入研究下:)