May 19, 2009
Apache 的信息查看模块——Server-Status
"前提:启用httpd.conf配置文件里的两个模块:| LoadModule status_module modules/mod_status.so LoadModule info_module modules/mod_info.so\n本文我们将讨论使用 mod_status 和 mod_info to 来告诉你目前服务器的工作情况 我可以得到什么样的信息? 使用 mod_status,你可以知道谁在你的服务器上看些什么东西,以及有多少人连在Web 服务器上。还有其他可能你的客户不关心的信息,但是对于你,一个站点管理员来说,却是十分有用的信息。\n客户喜欢这些资料 我不知道你的客户都是怎样的人物,但是我的客户喜欢我提供的信息。每天一次的信息还不够,因为到一天结束时才知道就太晚了。所以他们喜欢知道现在正在发生的事情。\nmod_info 和 mod_status 这两个模块可以提供十分有用的信息,而且十分方便。 mod_status 能准确地告诉你,你的服务器正在“想”什么。你可以知道有哪些人在浏览您的网站,有多少子进程在运行,以及这些进程在干吗。\n如果你使用缺省方法安装的 Apache 的 …"
May 19, 2009
解决win环境下Apache占用大量内存的问题
"我有个服务是在windows下的Apache2提供的。访问量不是很大,隔4、5天竟然停止服务,调查发现Apache2的进程httpd.exe占用内存达到了1.5G。在网上找到如下解决办法。\n用记事本打开apache2\\conf\\httpd.conf,查找MaxRequestsPerChild,将MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。\n原因是:\n通常在“Windows任务管理器-进程”中可以看到两个apache.exe进程,一个是父进程、一个是子进程,父进程接到访问请求后,将请 求交由子进程处理。MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理 “MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。\n如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为 不断终止、启动子进程降低访问效率, …"
May 19, 2009
windows下nginx-0.7.10+php-5.2.6+fastcgi安装日志
"最近心里有点痒,打算怀下旧,搞个php玩玩。找了几台服务器想装个php,虽然是举手之劳,但是总觉得有点不方便。另外家里的宽带总被占线,所以在服务器上做测试那也比较痛苦。\n所以就想在本机弄个,记得以前有个apache php mysql的整合安装版,这可是个好东西,如果有人问我怎么在windows装php啊,我顺口就告诉他找这个,的确可以省不少力气。\n不过今天我就不想用这古老的玩意装机了,虽然这东西装得是快,不过我已经不怎么记得起apache的配置怎么写,甚至有点厌恶写那配置。\n于是我下了个nginx的windows版,然后再找个php的windows版,在http://www.kevinworthington.com/category/computers/nginx/,下完后先装nginx,没什么复杂,启动,在浏览器输入http://127.0.0.1,没有反应,看一下netstat -an,发现貌似80端口存在,估计这个端口不是nginx占用的,于是关掉所有开启的程序,再启动,再刷新,就可以看到有一个测试页出现了。\n这样算是弄完了一个东西,接下来装php吧,先把它解压到d盘,放 …"
May 16, 2009
如何根据rowid获取extent_id
"我们知道,rowid是由四部分组成的,分别是data_object_id,file_id,block_number和row_number,通过oracle提供的dbms_rowid包可以很方便的将一串rowid解析出上述四部分的内容。然后根据这些信息,则可以获取其extent_id。\nSYS@datac\u0026gt;declare 2 v_block_id number; 3 v_file_id number; 4 v_object_id number; 5 v_extent_id number; 6 v_object_name varchar2(30); 7 v_owner varchar2(30); 8 v_rowid varchar2(20):=\u0026#39;AAACrKAAXAAAAzUAAH\u0026#39;; 9 begin 10 select dbms_rowid.ROWID_BLOCK_NUMBER(v_rowid), 11 dbms_rowid.ROWID_RELATIVE_FNO(v_rowid), 12 dbms_rowid.ROWID_OBJECT(v_rowid) 13 …"
May 16, 2009
使用MySQL Proxy和MySQL Replication实现读写分离
"MySQL Replication 可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果slave增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性。\nMySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用 lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。\n安装教程请参考: http://blog.haohtml.com/archives/9465\nMySQL …"
May 16, 2009
MySQL Proxy工作机制浅析
"MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的。代理服务器是和TCP/IP协议打交道,而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,MySQL Protocol包括认证和查询两个基本过程:\n认证过程包括:\n客户端向服务器发起连接请求 服务器向客户端发送握手信息 客户端向服务器发送认证请求 服务器向客户端发送认证结果 如果认证通过,则进入查询过程:\n客户端向服务器发起查询请求 服务器向客户端返回查询结果 当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的,想详细了解MySQL Protocol的同学,可以去 这里 看看。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协 …"
May 16, 2009
MySQL DBA 管理 常用 命令
"虽然自己不是DBA,但是作为一个程序员,多多少少,应该了解一些数据库方面的东西,并不能只关心程序,不考虑数据库,看到一篇文章,就先转过来,也许以后自己哪天会用到。\n查看mysql的某个选项 show variables like ‘%VAR_NAME%’;\nselect @@VAR_NAME;\n在Linux下管理MySQL数据库的时候总有一些很紧急的情况,发现数据库突然变得压力很大了,那么作为一个DBA,也许需要一些常用的手段或者说命令去分析问题出现在哪里,然后解决:\n数据库突然产生压力时查看正在查询的SQL:(如果这里内容太多表示并发执行的SQL过多,或许数据库堵塞了,会越来越慢,正常情况下这里应该很少有东西的,也就是连接都在Sleep状态) /usr/local/mysql/bin/mysql -uroot -ppassword databaseName -e “show full processlist” | grep -v Sleep\n正在运行的SQL太多了,看不过来,那需要排序了,看持续执行时间最长的那些SQL: /usr/local/mysql/bin/mysql …"
May 13, 2009
利用 squid 反向代理提高网站性能
"级别: 初级\n李明慧 ([[email protected]][2]), 软件测试工程师, IBM\n2009 年 4 月 02 日\n本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性。\n现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。\n反向代理的概念\n反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服\n务器的内容缓存器。其系统结构如图 1\n[][3]\n反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务 …"
May 13, 2009
反向代理简介
"代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使 内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的 代理服务是不能实现的,需要使用反向代理来实现。\n本文将详细介绍反向代理服务的概念以及如何利用反向代理服务器提高WEB服务器的性能和安全性。\n一.反向代理的概念\n什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。典型的结构如下图所示:\nWeb服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏 览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务 …"
May 10, 2009
通过分区(Partition)提升MySQL性能
"什么是数据库分区?\n数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 分区主要有两种形式://这里一定要注意行和列的概念(row是行,column是列)\n1. 水平分区(Horizontal Partitioning)这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(朋奕注:这里具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份) 2. 垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列 被划分到特定的分区,每个分区都包含了其中的列所对应的行。 举个简单例子:一个包含了 …"