一个Apache故障分析过程

[不指定 2013/08/17 21:04 | by ipaddr ]

故障现象为Apache进程数不断上涨,最终达到最大进程数后无法再提供服务,access.log日志也不再滚动,修改日志格式输出请求处理时间后,发现部分请求达到30,60,90s+,初步判断为部分请求处理时间超长,长时间占用apache进程,导致新请求后只能派生新进程,最终所有进程都被长请求占用后,无法再提供服务.

使用  strace -p $ApachePID  跟踪发现,Apache进程都卡在:

recvfrom(29,  <unfinished ...>

进入 /proc/PID/fd/,查找fd=29的为某个socket:

29 -> socket:[968385]

再从/proc/net/tcp中找到id=968385的socket:

grep "968385" /proc/net/tcp


将IP地址,端口转换为10进制后,找到了后端挂掉的服务IP和端口,重启服务后恢复正常.

nginx配置文件中的location详解

[不指定 2011/08/21 18:45 | by ipaddr ]

location
语法:location [=|~|~*|^~] /uri/ { … }
默认:否

上下文:server

这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式,你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。

确定 哪个location 指令匹配一个特定指令,常规字符串第一个测试。常规字符串匹配请求的开始部分并且区分大小写,最明确的匹配将会被使用(查看下文明白 nginx 怎么确定它)。然后正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。如果没有找到匹配的正则表达式,使用常规字符串的结果。

有两个方法修改这个行为。第一个方法是使用 “=”前缀,将只执行严格匹配。如果这个查询匹配,那么将停止搜索并立即处理这个请求。例子:如果经常发生”/”请求,那么使用 “location = /” 将加速处理这个请求。

第二个是使用 ^~ 前缀。如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

而且它重要在于 NGINX 做比较没有 URL 编码,所以如果你有一个 URL 链接’/images/%20/test’ , 那么使用 “images/ /test” 限定location。

总结,指令按下列顺序被接受:
1. = 前缀的指令严格匹配这个查询。如果找到,停止搜索。
2. 剩下的常规字符串,长的在前。如果这个匹配使用 ^~ 前缀,搜索停止。
3. 正则表达式,按配置文件里的顺序。
4. 如果第三步产生匹配,则使用这个结果。否则使用第二步的匹配结果。

例子:

location = / {
# 只匹配 / 查询。
[ configuration A ]
}

location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[ configuration B ]
}

location ^~ /images/ {
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[ configuration C ]
}

location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。然而所有 /images/ 目录的请求将使用 Configuration C。
[ configuration D ]
}

例子请求:

/ -> configuration A

/documents/document.html -> configuration B

/images/1.gif -> configuration C

/documents/1.jpg -> configuration D

注意:按任意顺序定义这4个配置结果将仍然一样。

(location =) > (location 完整路径 ) >(location ^~ 路径) >(location ~*, ~ 正则) >(location 部分起始路径)
正则表达式根据配置文件中的前后顺序影响匹配, 前面的优先匹配. 其它则根据匹配长度来优先匹配.

参考:
http://wiki.nginx.org/NginxHttpCoreModule#location

This directive allows different configurations depending on the URI. It can be configured using both literal strings and regular expressions. To use regular expressions, you must use a prefix:

  1. "~" for case sensitive matching
  2. "~*" for case insensitive matching

To determine which location directive matches a particular query, the literal strings are checked first. Literal strings match the beginning portion of the query - the most specific match will be used. Afterwards, regular expressions are checked in the order defined in the configuration file. The first regular expression to match the query will stop the search. If no regular expression matches are found, the result from the literal string search is used.

For case insensitive operating systems, like Mac OS X or Windows with Cygwin, literal string matching is done in a case insensitive way (0.7.7). However, comparison is limited to single-byte locale's only.

Regular expression may contain captures (0.7.40), which can then be used in other directives.

It is possible to disable regular expression checks after literal string matching by using "^~" prefix. If the most specific match literal location has this prefix: regular expressions aren't checked.

By using the "=" prefix we define the exact match between request URI and location. When matched search stops immediately. E.g., if the request "/" occurs frequently, using "location = /" will speed up processing of this request a bit as search will stop after first comparison.

On exact match with literal location without "=" or "^~" prefixes search is also immediately terminated.

To summarize, the order in which directives are checked is as follows:

  1. Directives with the "=" prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings. If this match used the "^~" prefix, searching stops.
  3. Regular expressions, in the order they are defined in the configuration file.
  4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used.

It is important to know that nginx does the comparison against decoded URIs. For example, if you wish to match "/images/%20/test", then you must use "/images/ /test" to determine the location.


Nginx内置变量: http://wiki.nginx.org/HttpCoreModule

调节内核参数:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

如果,你的服务器,和所有可能的客户,都不处于NAT环境,还可以打开
net.ipv4.tcp_tw_recycle = 1

这里要注意一点,普通公网的机器不能起用回收,否则会导致问题。
参考:

http://zhangle.is-a-geek.org/2010/11/tcp_tw_recycle%E5%92%8Cnat/


如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系?默认的 TIMEOUT 时间

百万级PHP网站架构工具箱

[不指定 2011/06/15 19:33 | by ipaddr ]

  在了解过世界最大的PHP站点,Facebook的后台技术后,今天我们来了解一个百万级PHP站点的网站架构:Poppen.de。Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。

  Poppen.de目前有200万注册用户数、2万并发用户数、每天20万条私有消息、每天25万登录次数。而项目团队有11个开发人员,两个设计,两个系统管理员。该站点的商业模式采用免费增值模式,用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。

  如果用户想享受不受限制发送消息和上载图片,那么就得根据需要支付不同类型的会员服务,视频聊天及网站其他服务也采用同样的策略。

  Nginx

  Poppen.de 所有的服务都是基于Nginx服务上的。前端有两台Nginx服务器在高峰期提供每分钟15万次请求的负载,每个机器已经有四年寿命,并且只有一个CPU 和3GB RAM。Poppen.de拥有三台独立的图像服务器,由三台Nginx服务器为*.bilder.poppen.de提供每分钟8万次请求服务。

   Nginx 架构中一个很酷的设计就是有很多请求是由Memcached处理的,因此请求从缓存中获取内容而不需要直接访问PHP机器。比如,用户信息页(user profile)是网站需要密集处理的内容,如果把用户信息页全部缓存到Memcached上,那么请求直接从Memcached上获取内容。 Poppen.de的Memcached每分钟可以处理8000次请求。

  架构中有三个Nginx图像服务器提供本地图像缓存,用户上载 图像到一个中央文件服务器。当向这三个Nginx之一中请求图像时,如果服务器本地中没有存在该图像,则从中央文件服务器下载到该服务器上作缓存并提供服务。这种负载均衡的分布式图像服务器架构设计可以减轻主要存储设备的负载。

  PHP-FPM

  该网站运行在PHP- FPM上。共有28台双CPU、6GB内存的PHP机器,每个机器上运行100个PHP-FPM的工作线程。使用启用了APC的PHP5.3.x。 PHP5.3可以降低CPU和内存使用率的30%以上。

  程序代码是基于Symfony1.2框架之上开发的。一是可以使用外部资源,二是能够提高项目开发进度,同时在一个著名的框架上可以让新开发人员更容易加入到团队中来。虽然没有任何事情都是十全十美的,但可以从Symfony框架中得到很多好处,让团队可以更多的精力放在Poppen.de的业务开发上去。

  网站性能优化使用XHProf,这是Facebook开源出来的一个类库。这个框架非常容易个性化和配置,能够可以缓存大部分高代价的服务器计算。

  MySQL

  MySQL是网站主要的RDBMS。网站又几个MySql服务器:一台4CPU、32GB的服务器存储用户相关信息,如基本信息、照片描述信息等。这台机器已经使用了4 年,下一步计划会使用共享集群来替换它。目前仍基于这个系统上进行设计,以简化数据访问代码。根据用户ID进行数据分区,因为网站中大部分信息都是以用户为中心的,如照片、视频、消息等。

  有三台服务器按主-从-从配置架构提供用户论坛服务。一台从服务器负责网站自定义消息存储,到现在有 2.5亿条消息。另外四台机器为主-从配置关系。另外由4台机器配置成NDB族群专门服务于密集型写操作数据,如用户访问统计信息。

  数据表设计尽量避免关联操作,尽可能缓存最多的数据。当然,数据库的结构化规范已经完全被破坏掉了。因此,为了更容易搜索,数据库设计创建了数据挖掘表。大部分表是MyISAM型表,可以提供快速查找。现在的问题是越来越多的表已经全表锁住了。Poppen.de正考虑往XtraDB存储引擎上迁移。

  Memcached

  网站架构中Memcached应用相当多,超过45GB的高速缓存和51个节点。缓存了Session会话、视图缓存以及函数执行缓存等。架构中有一个系统当记录被修改时可以自动地把数据更新到缓存中去。未来改善缓存更新的可能方案是使用新的Redis Hash API或者MongoDB。

  RabbitMQ

   在 2009年中开始在架构中使用RabbitMQ。这是一个很好的消息解决方案,便于部署和集中到这个架构中去,在LVS后运行了两台RabbitMQ服务器。在上个月,已经把更多的东西集成到该队列中,意味着同一时刻有28台PHP服务器每天要处理50万次请求。发送日志、邮件通知、系统消息、图像上载等更多的东西到这个队列中。

  应用PHP-FPM中的fastcgi_finish_request()函数集成队列消息,可以把消息异步发送到队列中。当系统需要给用户发送HTML或JSON格式响应时,就调用这个函数,这样用户就没有必要等到PHP脚本清理。

  这个系统可以改善架构资源管理。例如,在高峰期服务每分钟可以处理1000次登录请求。这表示有1000并发更新用户表保存用户的登录时间。由于使用了队列机制,可以按相反的顺序来运行这些查询。如果需要提高处理速度,只需要增加更多的队列处理者即可,甚至可以增加更多的服务器到这集群中去,而不需要修改任何配置和部署新节点。

  CouchDB

  日志存储CouchDB运行在一台机器上。在这台机器上可以根据模块/行为进行日志查询 /分组,或者根据错误类型等等。这对定位问题非常有用。在使用日志聚合服务CouchDB之前,不得不逐台登录到PHP服务器上设法日志分析定位问题,这是非常麻烦的。而现在把所有的日志集中到队列中保存到CouchDB中,可以集中进行问题检查和分析。

  Graphite

  网站使用Graphite采集网站实时信息并统计。从请求每个模块/行为到Memcached的命中和未命中、RabbitMQ状态监控以及Unix负载等等。Graphite服务平均每分钟有4800次更新操作。实践已经证实要监测网站发发生什么是非常有用的,它的简单文本协议和绘图功能可以方便地即插即 用的方式用于任何需要监控的系统上。

  一件很酷的事情是使用Graphite同时监控了网站的两个版本。一月份部署了Symfony框架新版本,以前代码作为一个备份部署。这就意味着网站可能会面临性能问题。因此可以使用Graphite来对两个版本在线进行对比。

  发现新版本上的Unix负载表较高,于是使用XHProf对两个版本进行性能分析,找出问题所在。

  Red5

  网站为用户也提供了两种类型的视频服务,一种是用户自己上载的视频,另外一种是视频聊天,用户视频互动和分享。到2009年年中,每月为用户提供17TB的流量服务。

  Tsung

  Tsung 是一个Erlang编写的分布式基准分析工具。在Poppen.de网站中主要用于HTTP基准分析、MySQL与其他存储系统(XtraDB)的对比分析。用一个系统记录了主要的MySQL服务器的流量,再转换成Tsung的基准会话。然后对该流量进行回放,由Tsung产生数以千计的并发用户访问实验室的服务器。这样就可以在实验环境中与真实场景非常接近。

一. 环境
1.操作系统: Suse Linux 10
2.jdk: 1.6.0_13 (使用RPM包安装)
3.jdk安装目录: /usr/java/default => /usr/java/jdk1.6.0_13
4.tomcat: tomcat6.0.20 (官方下载tgz包,直接解压到/usr/local/tomcat)
5.tomcat安装目录: /usr/local/tomcat
(一直漂[鱼漂]原创,转载请注册)

二.创建用户
#useradd -u 1003 -g users webadmin

三.修改目录所有者
#chown -R webadmin.users /usr/local/tomcat

四.安装jsvc
#cd /usr/local/tomcat/bin
#tar xvfz jsvc.tar.gz
#mv jsvc-src jsvc
#cd jsvc
#sh ./support/buildconf.sh
#chmod 755 configure
#./configure --with-java=/usr/java/default
#make
注意查看当前目录,是否生成了jsvc可执行文件.

五.修改启动文件
#vi ./native/Tomcat5.sh
改成如下内容:
(主要修改了前面的配置部分,以及start,stop中的jsvc的路径)

#!/bin/sh
##############################################################################
#
#   Copyright 2004 The Apache Software Foundation.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
##############################################################################
#
# Small shell script to show how to start/stop Tomcat using jsvc
# If you want to have Tomcat running on port 80 please modify the server.xml
# file:
#
#    <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->
#    <Connector className="org.apache.catalina.connector.http.HttpConnector"
#               port="80" minProcessors="5" maxProcessors="75"
#               enableLookups="true" redirectPort="8443"
#               acceptCount="10" debug="0" connectionTimeout="60000"/>
#
# That is for Tomcat-5.0.x (Apache Tomcat/5.0)
#
# Adapt the following lines to your configuration
JAVA_HOME=/usr/java/default
CATALINA_HOME=/usr/local/tomcat
DAEMON_HOME=/usr/local/tomcat/bin/jsvc
TOMCAT_USER=webadmin
JAVA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=64M"

# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/usr/local/tomcat

CATALINA_OPTS="-Djava.library.path=/home/jfclere/jakarta-tomcat-connectors/jni/native/.libs"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

case "$1" in
  start)
    #
    # Start Tomcat
    #
    $DAEMON_HOME/jsvc \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $JAVA_OPTS \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

  stop)
    #
    # Stop Tomcat
    #
    $DAEMON_HOME/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

  *)
    echo "Usage tomcat.sh start/stop"
    exit 1;;
esac
                                              


六.拷贝启动文件
#cp ./native/Tomcat5.sh /etc/init.d/tomcat6
#chmod a+x /etc/init.d/tomcat6

七.添加服务
#chkconfig --add tomcat6
#chkconfig --level 345 tomcat6 on

八.完成,启动服务
#/etc/init.d/tomcat6 start | stop
同时重启系统,tomcat也就会自动启动了.

九.中文文件名问题
Linux下的Tomcat在下载中文文件名时,有时会出现无法下载,404错误的页面,可以通过下面的方法修复此问题:
1. 修改server.xml,在connector中加入URIEncoding="UTF-8",告诉Tomcat使用UTF-8来解析URL(IE默认是用utf-8编码URL)
2. 修改tomcat启动脚本,加上export LC_ALL="zh_CN.gbk",使得Tomcat在读定系统系统时,使用gbk编码处理文件名。(也可以设置为其它编码,如UTF8)

不知道是怎么一回事,最近用Microsoft Outlook 2003收信时,贴上Email里的图片突然不能看了,只有图框但是图上会出现 [X] 的红色符号。在网络上查询了一下,并找到如下的方法,经过验证确实可以解决这个问题,只是好像称不了多久又出现同样的情形了,看样子得再做一次,所以把方法写下来免得自己忘记了。

方法一:
1. 开启 Microsoft Outlook 2003 并选择选单上的[说明]-[检测并修复]。英文版选 [Help]-[Detect and Repair]。
2. 勾选 [放弃自订设定并还原预设]。英文版勾选 [Discard my customized settings and restore default settings]。
3. 接着按[开始]让Outlook自己修复。如果当初安装Outlook时没留备份程序,那就要拿原光盘片并重新安装了。英文版按[Start]。
4. 修复完成后,重新启动Outlook 2003 后会自动重新设定User Profile,个人的经验,全部设定几乎和之前一模一样,没什么改变,但图已经可以显示了。

方法二:
我还未试过,但先留起来以备不时之需。
1. Exit out of Outlook 2003 on the machine with the issue.
2. Open the registry (Start->Run->type cmd->click Ok)
3. Navigate and open the following registry key HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder
4. Within the key…it should say something like %USERPROFILE%\Local Settings\Temporary Internet Files\OLK3D\
5. Highlight and delete %USERPROFILE%\Local Settings\Temporary Internet Files\OLK3D\
6. Close out of the registry and open Outlook 2003!
7. Now the problem shall be fixed and show your picture on email.

1. 软件下载

Apache 2.2 (这里有2.2.11为例)
http://httpd.apache.org/download.cgi
下载文件:apache_2.2.11-win32-x86-openssl-0.9.8i.msi
(注意,如果打算用到HTTPS,请下载包含openssl的版本)

Subversion (这里以1.5.3为例)
http://subversion.tigris.org/getting.html
下载文件:Setup-Subversion-1.5.3.msi

(此文档来源: http://www.eit.name ,原创作者: 鱼漂; 转载请注明)

2.安装规划

Apache2.2的安装路径为 D:\www\Apache
Subversion的安装路径为D:\www\Subversion
Subversion Repository的路径为D:\www\svnRep

3.安装

运行apache_2.2.11-win32-x86-openssl-0.9.8i.msi安装到D:\www\Apache目录,端口为80
运行Setup-Subversion-1.5.3.msi安装到D:\www\Subversion,安装时选择"Binding for Apache 2.2.x"

4.配置Subversion Repository

A.初始化Repository

手动创建D:\www\SVNRep目录;
打开DOS命令行cmd,进入D:\www\subversion\bin目录,运行以下命令初始化Repository:
D:\www\Subversion\bin>svnadmin create D:\www\SVNRep

B.创建Repository目录结构

在D:\www\tmp目录下创建以下目录结构:
――ProjectOne
| |
| ――branches
| |
| ――tags
| |
| ――trunk
|
――ProjectTwo
|
――branches
|
――tags
|
――trunk
使用以下命令,导入到Subversion:

D:\www\Subversion\bin>svn import D:\www\tmp file:///D:/www/SVNRep/ -m "init"
(需要特别注意的是file:///D:/www/SVNRep/的语法,这里是正斜杠)

导入完后,D:\www\tmp可以删除了

5. 配置Apache

复制D:\www\Subversion\bin目录下的mod_dav_svn.so,mod_authz_svn.soD:\www\Apache\modules目录。
配置Apache的conf/httpd.conf文件,在很多#LoadModule的后面,加下:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
#LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNPath "D:/www/SVNRep"
AuthType Basic
AuthName "TomZhou's SVN"
AuthUserFile "D:/www/Apache/conf/svn.passwd"
Require valid-user
</Location>


使用Apache和htpasswd创建D:/www/Apache/conf/svn.passwd文件:


D:\www\Apache\bin>htpasswd -c -m D:\www\Apache\conf\svn.passwd tomzhou
New password: ********
Re-type new password: ********
Adding password for user tomzhou

D:\www\Apache\bin>htpasswd -m D:\www\Apache\conf\svn.passwd ipaddr
New password: ********
Re-type new password: ********
Adding password for user ipaddr

D:\www\Apache\bin>

注意,需要先进入到D:\www\apache\bin目录运行,同时,使用"-c"参数创建密码文件,第二次添加用户时不需要"-c"

重启Apache即可进行测试了。打开IE访问以下进址:
http://localhost/svn
输入刚才创建的用户名和密码,即可访问了。


6.按不同的目录定义权限

可以使用mod_authz_svn.so来实现,Apache配置如下:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNPath "D:/www/SVNRep"
AuthType Basic
AuthName "TomZhou's SVN"
AuthUserFile "D:/www/Apache/conf/svn.passwd"
AuthzSVNAccessFile "D:/www/SVNRep/conf/authz.conf"
Require valid-user
</Location>

使用上面的方法,创建svn.passwd文件。


创建D:/www/SVNRep/conf/authz.conf文件,内容如下:

#两个分组:committers,developers
[groups]
committers = tomzhou ipaddr richard
developers = jimmy michel spark sean
#在根目录下指定所有的用户有读权限
[/ProjectOne]
* = r
#追加 committers 组用户有读写权限
@committers = rw
#在 branches/dev 目录下指定 developers 组的用户有读写权限
[/ProjectOne/trunk]
@developers = rw
#在 /tags 组下给予用户 tony 读写权限
[/ProjectOne/tags]
tomzhou = rw
#禁止所有用户访问 /private 目录
[/ProjectOne/private]
* =
#给 committers 组用户读权限
@committers= r


另外,你还可以结合Apache的Allow,Deny,Order,Satisfy等指令来配置基于IP的访问规则。


其它参考:

a.HTTPS的配置只渗及到Apache,可参考我的其它文章或CATools工具.
b.Linux下的配置方式大同小异.
c.Subversion官方的文档,对Subversion的使用和配置描述得非常清楚,有时间可以参考.


Linux Bandwidth Monitor

[不指定 2009/02/23 23:20 | by ipaddr ]

Linux bandwidth monitor (bwmon) is yet another utility that measures bandwidth utiliazation per interface basis. It is coded in C and takes advantage of POSIX thread and curses library. It runs only on Linux systems since the utility reads /proc/net/dev and /proc/uptime.


The utility reads /proc/net/dev and /proc/uptime files in order to print out bandwidth usage at user selected intervals, maximum bandwidth usage since initialization of the utility and average bandwidth usage since the last reboot. This is done per interface basis.


Getting the software


You can download the software from various mirror sites which are listed in http://prdownloads.sourceforge.net/bwmon/bwmon-1.3.tar.gz?download


Installation


Tested on Linux 2.2.x, 2.4.x and 2.5.x, SuSE and RedHat distributions.
(经鱼漂测试,2.6也是可以用的)


To compile, simply say

$ make

To install, say (optional)

# make install

Or copy bwmon binary where ever you want.

Usage


Linux Network Bandwidth Monitor $Revision: 1.3 $
by Kimmo Nupponen (kimmoon@users.sourceforge.net)

$Date: 2002/05/08 06:33:09 $
usage: ./bwmon [-b] [-h] [-a] [-m] [-u seconds]
       -a Print bandwidth utiliasation in Kbytes rather than Kbits. The default
          is to use Kbits
       -a Print also average bandwidth since last boot per interface
       -m Print maximum bandwidth since launch of this utility
       -h Print this help message
       -u Update timeout (integer value)
        Use <space-bar> to refresh the screen before update timeout expires
       Use 'q' or 'Q' to exit this utility
Note that you have to have proc mounted to allow this software
to work!


最近同事中了U盘病毒,此病毒非常顽强,还没有发现可以查杀它的杀毒软件,并且网上求助的人很多,但还没有解决方案,此病毒会自动关闭很多工具,比如Process Explorer等,并且在U盘根目录,创建m.exe和autorun.exe。当双击U盘时,自动执行m.exe,m.exe在后台调用IE访问某个网站。

此病毒的主体在C:\Windows\System32目录下,并且文件名是随机的,可以在注册表的:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
路径,找到对应病毒对应的目录,比如cdceefbccdecd,在此目录下,找到对应的DLL为cdceefbccdecd.dll (文件名和目录名相同)
(注意,文件名是随机的,文件名的主要特征是长度比较长,而且没特别意义,主要由b-f字母构成。--鱼漂 admin.net[@]163.com原创,转载请注明--)

找到此病毒主体后,将此文件删除即可。由于当前此Dll正在使用,所以不可以直接删除,你可以安装Unlocker后,再删除,或者是通过WinPE从光盘启动系统后再删除。

删除病毒后,再删除U盘上的m.exe,删除的方法为:
1.在系统启动Windows的时候,插入U盘。(进入Windows后再插入,就会自动执行m.exe病毒)
2.登录Windows,右击U盘盘符,选择“打开”进入U盘(不可双击U盘盘符)
3.删除m.exe和autorun.exe文件


office 2007采用了一种新的文档格式,新的Word、Excel以及PowerPoint文件扩展名分别是.docx、.xlsx以及.pptx格式(目前的文件扩展名分别为.doc、.xls以及.ppt)。这个X应该代表现在流行的XML格式,熟悉XML的人应该意味着这个X意味着什么.

但是这种新格式在office 2007以前的版本上是打不开的,好在微软准备了一个叫Microsoft Office Word、Excel 和 PowerPoint 2007 文件格式兼容包的的东东,下载安装后老版本就可以对Microsoft Office Word、Excel 和 PowerPoint 2007 新增的文件格式进行打开、编辑和保存文档、工作簿和演示文稿了.

下载地址是:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=941B3470-3AE9-4AEE-8F43-C6BB74CD1466


分页: 2/4 第一页 上页 1 2 3 4 下页 最后页 [ 显示模式: 摘要 | 列表 ]