Apache性能优化 不指定

jed , 2007-4-20 17:04 , 服务器技术 , 评论(0) , 阅读(5308) , Via 本站原创
Tunning Apache

Apache几目前Internet上使用最为广泛的Web服务器。它具有比商业Web服务器不遑多让的功能与速度,同时安装与设置也十分简单,正是这些特性让它成为市场占有率最高的Web服务器软件。不过Apache安装简单,并不意味着简单地安装就可以适用于绝大多数应用环境,在高负荷的Web站点,Apache还需要进行调整、优化......

优化方法

Apache的配置文件是httpd.conf。Windows下该文件位于Apache安装目录的Conf子目录下,RedHat Enterprise Linux AS 3.0 Update 2位于/etc/httpd/conf。通过调整该文件的某些参数,可以优化Apache的运行效率。

为了验证后文Apache参数的调整是否起作用,我们通常用Apache附带的ab(Apache Bench)对其进行压力测试。

ab最常用的语法格式是这样的:

ab -n XXX -c YYY -k http://hostname.port/path/filename

其中:

-n XXX:
表示最多进行XXX次测试。也就是下载filename文件XXX次。

-c YYY:
客户端并发连接个数。

-k:    
启用HTTP KeepAlive功能。默认不启用KeepAlive功能。

针对Web服务器总体优化 不指定

jed , 2007-4-20 16:57 , 服务器技术 , 评论(0) , 阅读(4065) , Via 本站原创
一、文件系统
  在fstab里加入noatime,如
  #cat /etc/fstab
  /dev/sda1          /home                  ext3    noatime,defaults        1 2
  reboot或者重新mount生效
  二、Tcp优化
  在/etc/sysctl.conf里加入
  net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 3
  net.ipv4.tcp_syncookies = 1 #启用syncookies
          net.ipv4.tcp_max_syn_backlog = 8192 #定义backlog队列容纳的最大半连接数
  net.ipv4.tcp_fin_timeout = 30
  net.ipv4.tcp_keepalive_time = 1800
  net.ipv4.tcp_window_scaling = 0
  net.ipv4.tcp_sack = 0
  net.ipv4.tcp_timestamps = 0
  [color=blue:b6bef7e40f]老实说,对于sysctl.conf究竟能不能用起来还真不知道,因为我是没用起来,虽然内核里面是支持的 = =b[/color:b6bef7e40f]

  三、虚拟内存优化
  /etc/sysctl.conf
  vm.lower_zone_protection = 100

  四、I/O调度器
  在grub.conf的相应启动选项里加入elevator=deadline,如:
  kernel /vmlinuz-2.6.6 ro root=/dev/sda6 elevator=deadline
  这里用了Deadline的I/O调度器,它比系统默认的AnticipatoryI/O调度器更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势。

  五、内核源代码参数修改
  修改/usr/src/linux/include/linux/posix_types.h
  #define __FD_SETSIZE 1024  65536  
  设置fd_set支持的最大数量
    
  修改/usr/src/linux/include/linux/fs.h
  #define INR_OPEN 1024  65536
  #define NR_FILE 8192  65536
  #define NR_RESERVED_FILES 10  128
  设置最大打开文件数量(TCP连接数量)

  修改/usr/src/linux/include/net/tcp.h
  #define TCP_TIMEWAIT_LEN (60*HZ)  1*HZ
  #define TCP_SYNACK_RETRIES  5  3  
  设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上
  也是减少重试时间

  make menuconfig中,去掉没用的选项,打开以下选项的开关:
  High Memory Support (支持4GB以上内存)
  Symmetric multi-processing support (支持多CPU)
  TCP syncookie support (可以防DOS)
  设置文件打开数等的其他方法(好处就是可以不重新编译内核)
  在 /etc/init.d/sshd里加入(统一加在. /etc/rc.d/init.d/functions行后面)
  [code:1:b6bef7e40f]ulimit -n 65535 >/dev/null 2>&1
  ulimit -u 16384 >/dev/null 2>&1[/code:1:b6bef7e40f]
  重起sshd:nohup /etc/init.d/sshd restart &
  BTW:其实limits.conf不好,因为他需要root su - user遗传给普通用户
  如果直接远程登陆是没效果的

  六、apache
  1、安装:采用worker线程工作模式
  [code:1:b6bef7e40f]./configure --prefix=/prefix  
  --enable-mods-shared=all  
  --enable-deflate  
  --with-mpm=worker[/code:1:b6bef7e40f][color=blue:b6bef7e40f]chmod +s /prefix/bin/httpd [/color:b6bef7e40f]#允许普通用户也可以启动apache
  2、配置:httpd.conf
  [code:1:b6bef7e40f]Timeout 60
  KeepAlive On
  MaxKeepAliveRequests 150
  KeepAliveTimeout   5

  StartServers         3
  MaxClients         3200   #支持3200个客户端哦
  ServerLimit        32
  MinSpareThreads     50
  MaxSpareThreads     250
  ThreadLimit   200
  ThreadsPerChild     100
  MaxRequestsPerChild 0

  #上面的几个参数对机器要求比较高,如果是比较差的机器,每台机1000个连接最多了,你可能要重新设置参数,我的机器是DELL 2850

  UseCanonicalName Off
  HostnameLookups Off
  ServerSignature Off[/code:1:b6bef7e40f]

  备注:
  要apache支持3200个客户端,默认最大支持1024(64*16)个客户端,所以必须修改apache的源代码树下的server/mpm/worker/worker.c
  把 #define DEFAULT_THREAD_LIMIT 64  --> 128 #每个子进程中包含的线程数
     #define DEFAULT_SERVER_LIMIT 16  -->  32  #最大的子进程总数

  注意,不要把这两个值设得太高,超过系统的处理能力,那就事与愿违了
  现在我的机子能承受每天350W的访问量,高峰期的load最多到2左右

  Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients

  大家可以根据自己的实际情况调试一下的。祝大家愉快。   :)


Apache 1.3 限制并发连接 晴

jed , 2007-4-19 08:27 , 服务器技术 , 评论(0) , 阅读(3916) , Via 本站原创
Apache 1.3 限制并发连接



由于网站内容有很多下载,而大家一般使用flasget下载,一般使用多线程,同时有很多人在大量下载资料的话,就会形成并发连接饱和,后面的人就无法下载使用了。

这个问题一直困扰我们。

解决的思路应该有两个方面,一个是限制单ip的并发连接。一个是增加服务器并发连接的容量。目前服务器默认是1024个连接,还不会增加。

关于限制并发的问题,经过多次测试,基本解决了apache 1.3 限制并发连接的问题。

http://www.gknw.net/development/apache/apache-1.3/win32/modules/

从这里下载:

mod_limitipconn-0.04-w32.zip

解压后,其中 有些说明文件。

有 mod_limitipconn.so 文件,拷贝文件到 apache 的 modules 目录下。



1、编辑  httpd.conf

在相应位置,增加

LoadModule limitipconn_module modules/mod_limitipconn.so

AddModule mod_limitipconn.c



2、在AddModule mod_limitipconn.c 后面,即增加 mod设置:

# Configuration for mod_limitipconn

<IfModule mod_limitipconn.c>

   <Location /somewhere>

        MaxConnPerIP 3

        # exempting images from the connection limit is often a good

        # idea if your web page has lots of inline images, since these

        # pages often generate a flurry of concurrent image requests

        NoIPLimit image/*

   </Location>



   <Location /mp3>

        MaxConnPerIP 1

       # In this case, all MIME types other than audio/mpeg and video*

        # are exempt from the limit check

        OnlyIPLimit audio/mpeg video

   </Location>

</IfModule>

# End of mod_limitipconn.



3、设置

ExtendedStatus On



4、在这里一般以为就可以了,结果出现严重错误,apache无法启动。

错误是:

The Apache service named D:\Server\Apache\Apache.exe reported the following error:

>>> Invalid command 'ExtendedStatus', perhaps mis-spelled or defined by a module not included in the server configuration <<<

before the error.log file could be opened.

More information may be available in the error.log file.   .



通过搜索,发现是因为mod_status模块 没有加载的缘故。

通过loadModule 和 downmodule 加载 mod_status模块。

重新启动apahce,解决问题。



5、如果要看 access文件,可以修改:

# Optional supress logging of denied access

CustomLog logs/access_log common env=!LIMITIP



6、控制特殊文件的下载:

AddType application/x-rar .rar .iso #添加自定义minetype,控制iso和rar的下载



< IfModule mod_limitipconn.c >
< Location / >
MaxConnPerIP 5
NoIPLimit image/*
< /Location >

< Location /upload >
MaxConnPerIP 1 #upload文件夹限制下载
OnlyIPLimit audio/mpeg video/* application/x-rar #只对音频视频文件,自定义 minetype文件起作用
< / Location >
< / IfModule >

apache如何限制用户线程数? 晴

jed , 2007-4-17 08:48 , 服务器技术 , 评论(0) , 阅读(4157) , Via 本站原创
限制客户端一个IP同时连接数,实际应用:限制flashget,网络蚂蚁等软件只有2个进程有效

apache如何限制用户线程数?

限制客户端一个IP同时连接数,实际应用:限制flashget,网络蚂蚁等软件只有2个进程有效。
(注释:/opt/httpd/是我的apache的安装目录,大家可以自行改成自己的路径)

首先,从http://dominia.org/djao/下载mod_limitipconn-0.22.tar.gz
上传解压后运行

#/opt/httpd/bin/apxs -c -i -a mod_limitipconn.c 将此外部DSO模块编译入Apache

检查/opt/httpd/modules是否有mod_limitipconn.so模块

配置apache配置文件,找到相应位置,如下:
LoadModule limitipconn_module modules/mod_limitipconn.so
#


 MaxConnPerIP 2


并将#ExtendedStatus On的注释去掉

重启Apache,检查是否可限制单一IP多个并发连接

测试效果,用flashget下载,默认是5个蚂蚁,只有2个可以连接并进行下载,其他的3个始终连接不上!--成功!!!

Windows下编译Apache 晴

jed , 2007-4-17 08:44 , 服务器技术 , 评论(0) , 阅读(4989) , Via 本站原创
首先下载Apache的source,Unix Source: apache_1.3.37.tar.gz 。当然也可以选择后面这个版本:Win32 Source: httpd-2.0.59-win32-src.zip 。这里面的区别就是,后者可以直接在Windows下进行编译。需要的一点转换就是要把某些文件的格式由unix转换为DOS的。这里我们选择前者。

需要的工具:Visual C++,这里需要使用Visual C++来编译,其实Apache已经设置好了makefile,所以真正要用的是namke。

有了以上的准备就可以很方便的编译Apache了。在Windows下真的不如在Linux下边感觉好(即使选择了WIndows版本的Source),这里虽然是编译Apache了,但是很多参数不能用,所以Apache推荐直接安装Binary版本。不过通过编译apache可以体验制作工程的过程。下面开始:

解压缩下载的zip文件。apache工程布局是典型的Linux风格,根目录下放置的是一些脚本文件,用于探测环境并设置makefile,当然这些在Windows环境下使用不到也没办法用的。我们要使用的是/src目录下面的文件。nmake默认的文件是MAKEFILE,而我们要使用的是Makefile.win。在命令行下进入/src目录,执行以下命令

nmake /f Makefile.win _apacher

这样就得到了必需的apache.exe和一些dll文件,同时会在c:\生成相应的目录。但是如果想运行apache还需要在/conf目录配置http.conf文件。

PHP中Rename()函数的妙用 晴

jed , 2007-4-14 08:42 , 代码编程 , 评论(0) , 阅读(6396) , Via 本站原创
大家都知道,rename()函数可以对文件或目录进行重命名的操作。其实它还可以做很多事情。

熟悉unix的朋友应该知道shell命令mv,它相当与win32的移动,而且移动的同时可进行重命名。我发现,php的rename()函数就相当于mv,它不仅仅只有简单的重命名的功能,同样可以改变文件甚至整个目录的路径。


例如:

$oldpath ----文件或目录原来路径

$newpath ----新定义路径

那么 rename($oldpath,$newpath)就可以完成文件/目录移动的操作

经过我的测试,win32和unix的php4版本都支持这个功能。

另外,好象php4的win32版取消了unlink()函数。那么还可以巧用rename()函数来完成删除的操作,例如:

$path ---- 文件或目录路径

$tmp ---- tmp目录(/tmp)

用rename($path,$tmp) 将文件移动到tmp目录.




PHP 文件系统函数库 (3) 晴

jed , 2007-4-14 08:33 , 代码编程 , 评论(0) , 阅读(6588) , Via 本站原创
is_file 测试文件是否为正常文件。
  语法: boolean is_file(string filename);
  返回值: 布尔值
  函数种类: 文件存取
  内容说明: 本函数返回 true 值则表示指定的 filename 存在并为正常的文件。返回值放在快取缓冲区中,可以参考 clearstatcache()。
  参考: is_dir() is_link()

  is_link 测试文件是否为链接文件。
  语法: boolean is_link(string filename);
  返回值: 布尔值
  函数种类: 文件存取
  内容说明: 本函数返回 true 值则表示指定的 filename 存在并为符号链接文件 (symbolic link)。返回值放在快取缓冲区中,可以参考 clearstatcache()。
  参考: is_dir() is_file()

  is_readable 测试文件是否可读取。
  语法: boolean is_readable(string filename);
  返回值: 布尔值
  函数种类: 文件存取
  内容说明: 本函数返回 true 值则表示指定的 filename 存在并且可读取。返回值放在快取缓冲区中,参考 clearstatcache()。
  参考: is_writeable()

PHP 文件系统函数库 (2) 晴

jed , 2007-4-14 08:30 , 代码编程 , 评论(0) , 阅读(6795) , Via 本站原创
 fgets 取得文件指针所指的行。
  语法: string fgets(int fp, int length);
  返回值: 字符串
  函数种类: 文件存取
  内容说明: 本函数取得文件指针所指的行,返回字符串长度为行的长度减一。若发生错误则返回 false。一般常遇到的陷阱是用 C 语言的经验来使用本函数,而 EOF 时的处理方式则和 C 语言的 fgets() 不同。其中的文件指针必须是有效的,且必须是已经用 fopen()、popen() 或 fsockopen() 成功开文件的指针。

  使用范例

  <?php
    $fd = fopen("/tmp/myfile.txt", "r");
    while ($buffer = fgets($fd, 4096)) {
      echo $buffer;
    }
    fclose($fd);
  ?>

PHP 文件系统函数库 (1) 晴

jed , 2007-4-14 08:27 , 代码编程 , 评论(2) , 阅读(205087) , Via 本站原创
     basename: 返回不含路径的文件字符串。
  chgrp: 改变文件所属的群组。
  chmod: 改变文件的属性。
  chown: 改变文件的拥有者。
  clearstatcache: 清除文件状态快取。
  copy: 复制文件。
  delete: 无用的项目。
  dirname: 取得路径中的目录名。
  diskfreespace: 取得目录所在的剩余可用空间。
  fclose: 关闭已打开的文件。
  feof: 测试文件指针是否指到档尾。
  fgetc: 取得文件指针所指的字符。
  fgetcsv: 取得文件指针所指行,并解析 CSV 字段。
  fgets: 取得文件指针所指的行。
  fgetss: 取得文件指针所指的行,并去掉 HTML 语言标记。
  file: 将文件全部读入数组变量中。
  file_exists: 检查文件是否存在。
  fileatime: 取得文件最后的存取时间。
  filectime: 取得文件最后的改变时间。
  filegroup: 取得文件所属的群组。
  fileinode: 取得文件的 inode 值。
  filemtime: 取得文件最后的修改时间。
  fileowner: 取得文件的拥有者。
  fileperms: 取得文件的权限配置。
  filesize: 获得文件的大小。
  filetype: 获得文件的类型。
  flock: 锁住文件。
关于屏蔽微软正版提示-KB905474
中了招的网友请看
点击在新窗口中浏览此图片

删除后重启就可以了
还没中招的网友防止中招请看 (适用于xp专业版用户)
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
分页: 59/81 第一页 上页 54 55 56 57 58 59 60 61 62 63 下页 最后页 [ 显示模式: 摘要 | 列表 ]