估算Apache所需要的内存 (Linux/Unix)
发布于 2009-03-25 19:21 2 阅读:30,376 评论:2 标签: apache 内存

    精确的计算所需要的内存是很困难的,为了尽可能的精确,需要观察类似线上环境下观察服务器的负载和进程。毕竟如果不同的服务器配置和装的模块是有差异的,只有查看自己才可靠,所谓核心的东西要掌握在自己手里大概如此。。。。

    一个简单可靠的法子是,在压力测试时,找到httpd进程,查看一个进程使用了多少的内存,然后看看总的进程,即可估算一下。

    比如:
    ps aux | grep httpd
    查看每个httpd进程使用了多少内存,数字在第四列,格式为百分之几。

    ps aux | grep httpd | wc -l
    得到一共有多少进程,记得结果要减1,因为grep httpd也在结果中。

    free
    查看服务器内存总量,单位为K

    然后就可以估算了。比如一个进程占2%的内存,有27个httpd,总内存为4148424。那就是:
php -r "echo 0.002*4148424*26/1024;"
    结果为210.66215625M内存,这个只仅仅是为apache分配的。还得给其它服务留出足够空余的内存。而且考虑高峰期可能会比平时大12倍,这个时候仅仅考虑Apache就够了,嘿嘿。曾经出现过因磁盘IO过高导致服务器崩溃的场景。

    如果怎么算都不能让服务器有空余的内存,就得考虑限制最大进程数了。使用MaxClient指令可以用来限制。

    以上说得有误之处,还请各位指点!

展开全文  
收起全文  
Apache配置文件学习(一) (Linux/Unix)
发布于 2009-03-11 21:40 1 阅读:13,235 评论:1 标签: apache 配置

    1:<IfDefine [!]parameter-name> ... </IfDefine>
    而parameter-name是在服务启动时,通过httpd命令行的 -Dparameter 这样的形式指定的。

    2:<IfModule [!]module-file|module-identifier> ... </IfModule>
    module可以是模块的标识符或者是编译模块时的文件名。比如,rewrite_module就是一个模块标识符,而mod_rewrite.c则是编译模块时的文件名。如果模块包含多个源代码文件,您应当使用包含 STANDARD20_MODULE_STUFF 字符串的那个。

    而STANDARD20_MODULE_STUFF请参考:《编写第一个Apache模块――mod_helloworld

    3:User/Group指令用于设置实际提供服务的子进程的用户/组。为了使用这个指令,服务器必须以root身份启动和初始化。如果你以非root身份启动服务器,子进程将不能够切换至非特权用户/组,并继续以启动服务器的原始用户身份运行。如果确实以root用户启动了服务器,那么父进程将仍然以root身份运行。

    Unix-userid是下列值之一:

以下是引用片段:

 1:一个用户名/组:通过用户名/组引用用户/组
 2:"#"号后面跟一个用户/组编号 :通过用户/组编号引用用户/组

    用于运行子进程的用户必须是一个没有特权的用户/组,这样才能保证子进程无权访问那些不想为外界所知的文件,同样的,该用户/组亦需没有执行那些不应当被外界执行的程序的权限。

    进程的用户及层次关系可见:

以下是引用片段:
[root@login yayu]# pstree -apu | grep http
  |-httpd,10914 -DSSL
  |   |-httpd,8483,web -DSSL
  |   |-httpd,8489,web -DSSL
  |   |-httpd,8551,web -DSSL
  |   |-httpd,8552,web -DSSL
  |   |-httpd,8553,web -DSSL
  |   |-httpd,8554,web -DSSL
  |                       |-grep,8558 http


    4:如果在<VirtualHost>外设置了一个ServerName,而一个请求不能与某个ServerName指令相匹配,它将会由第一个<VirtualHost>段所伺服。

    5:ServerRoot指令设置了服务器所在的目录。一般来说它将包含conf/和logs/子目录。其它配置文件的相对路径即基于此目录 (比如Include或LoadModule)。而指定ServerRoot、DocumentRoot时不应包括最后的"/"。

    6:Order指令控制默认的访问状态与Allow和Deny指令生效的顺序,变态的命令。

    下面例子中,apache.org域中所有主机,除了foo.apache.org子域包含的主机被拒绝以外,其他都允许访问。而所有不在apache.org域中的主机都不允许访问,因为默认状态是拒绝对服务器的访问。

以下是引用片段:
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org

    另一方面,如果上个例子中的Order指令改变为"Deny,Allow",将允许所有主机的访问。这是因为,不管配置文件中指令的实际顺序如何,"Allow from apache.org"指令会最后被评估到并覆盖之前的"Deny from foo.apache.org"。所有不在apache.org域中的主机也允许访问是因为默认状态被改变到了允许。说白了就是控制Allow和Deny两个指定的顺序。

展开全文  
收起全文  
apache进程关闭方案 (Linux/Unix)
发布于 2007-05-23 18:19 1 阅读:11,702 评论:1 标签: apache 进程

当在重装apache前没有关闭现有的apache服务的时候,apache/bin/httpd将关闭不了。

状况如下:启动的时候能提示正常启动,关闭的时候说你就没有启动,提示找不到apache/logs/httpd.pid 文件,重新启动也没问题。kill进程时死一个活一个,犹如野草一般春风吹又生。

解决方案:建立apache/logs/httpd.pid 文件,输入首个httpd进程的id号,然后再停止,OK!就可以了

展开全文  
收起全文