Apache的三种工作模式( Prefork、Worker和Event)

一,Apache三种MPM介绍

Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。这三种MPM记录于conf/extra/httpd-mpm.conf文件中。

Prefork MPM:这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

Worker MPM:此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。

不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。

Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作继续阅读

定制Linux发行版(2):定制自己的软件包格式

redhat系统的软件包名字一般为.el6.rpm,假设我们要打造一款名为K-UX的操作系统,那我们可以使用mock,编译出.kux.rpm形式的软件包。在阅读本文之前,你可能需要知道rpmbuild和mock的原理及相关使用方法,这些本博客以前都介绍过。本文的实验环境为CentOS 6.4 x86_64。

为什么要使用mock?

mock是Linux平台下编译.src.rpm的工具,它是在rpmbuild上封装了一层,与rpmbuild相比,它的好处是可以自动解决安装过程中产生的各种依赖关系。而rpmbuild不能自动解决这些依赖关系。既然依赖关系解决了,那就可以写个简单的脚本,实现批量编译.src.rpm的任务了。

按理说,如果要大量编译.src.rpm包,应该使用Fedora提供的Koji工具,但因为Koji太过庞大,配置起来极其复杂,因此还是使用更为小巧智能的mock比较方便。

一,使用rpmbuild编译.kux.rpm格式的软件包

首先需要知道一点儿系统基础:
%dist一般表示操作系统平台,如el5、el6,我们要修改的.kux也需要修改此值
%arch一般表示硬件平台,i386、i686、ia64、x86_64等
要build出.kux.rpm格式的软件包,首先需要修改/etc/rpm/macros.dist文件

[root@os2 ~]# rpm -qf /etc/rpm/macros.dist 
centos-release-6-4.el6.centos.10.x86_64  #由该软件包释放

[root@os2 ~]# cat /etc/rpm/macros.dist 
# dist macros.

%rhel 6
%centos 6
%centos_ver 6
%dist .kux    #将这里的el6修改为kux
%el6 1

然后,再通过rpmbuild命令就可以编译出.kux.rpm格式的软件包了 继续阅读

Linux Server出现大量TIME_WAIT连接

可以先看看如下配置项的状态:

cat /proc/sys/net/ipv4/tcp_syncookies
cat /proc/sys/net/ipv4/tcp_timestamps
cat /proc/sys/net/ipv4/tcp_tw_reuse
cat /proc/sys/net/ipv4/tcp_tw_recycle
cat /proc/sys/net/ipv4/tcp_fin_timeout

编辑/etc/sysctl.conf文件:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 20
net.ipv4.tcp_keepalive_time = 1800

开启TCP同步标签(syncookie),防止一个套接字在有过多试图连接到达时引起过载
开启net.ipv4.tcp_tw_reuse可以将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接
TIME_WAIT快速回收通过net.ipv4.tcp_tw_recycle启用,由于其根据时间戳来判定,所以必须开启TCP时间戳(tcp_timestamps)才有效

使配置生效:

sysctl -p

CentOS 6.4安装配置NFS服务器

CentOS 6.4 64bit系统上设置NFS的过程,简单记录一下。

1,配置NFS服务端

$ yum install nfs-utils portmap  (适用centos 5)
$ yum install nfs-utils rpcbind  (适用centos 6)

假设服务端要挂载的目录是/mnt/koji,设置如下

$ vim /etc/exports

/mnt/koji       *(rw,async,no_root_squash,no_subtree_check)

继续阅读

一些Linux srpm源码包下载地址

对于Linux从业者来说,有时候可能会经常找一些.src.rpm格式的源码包,这里提供了几个常见的srpm源码包的下载地址。

http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/
redhat官网的源码包,重要性不言而喻。有些源码包有好几个版本,从低版本到高版本都有。更新的也比较频繁。注意:此目录中的源码包全部下载以后可能会占用28G的容量,下载前要看看本地空间够不够。

http://vault.centos.org/6.4/os/Source/SPackages/
这个更新的不如redhat官方及时。但一个源码包仅有一个版本,暂时还不确定其中源码包的版本是不是跟CentOS发行版里的版本一致。但可以确定的是,更新相对上面的redhat官方较慢。

其它的待补充。如果要批量下载,可以考虑使用wget命令配合以下参数实现批量下载,关于wget的详细用法可以参考wget命令用法简介

wget -r -np -nd --accept=src.rpm http://vault.centos.org/6.4/os/Source/SPackages/

Linux Kernel 更新 Patch 方法

在《Linux的patch原理》一文中,本博客讲述了使用patch命令来更新Patch的方法。今天写写正常情况下向Linux Kernel加入Patch的过程。本文实验环境基于CentOS 6.4 64bit。

1,准备工作

安装rpmbuild及相关依赖包,并准备好一个kernel源码

yum install rpm-build
yum install make gcc redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel perl-ExtUtils-Embed bison flex hmaccalc
wget http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-431.el6.src.rpm

2,更新Patch

useradd mockbuild   #rpmbuild默认使用mockbuild用户来执行
rpm -ivh kernel-2.6.32-431.el6.src.rpm
cp zhukun.net.patch rpmbuild/SOURCES  #将写好的patch文件放入SOURCES目录中,重要!
cd rpmbuild/SPECS
vi kernel.spec

继续阅读

Linux系统安装程序简介

一,CentOS 6的光盘目录介绍

(1)Packages目录:包含安装所需的所有二进制RPM包。
(2)EFI目录:用于64位的基于EFI的系统引导。其中BOOT目录下的BOOTX64.conf为grub的配置文件,用于显示引导菜单。
(3)TRANS.TBL文件:记录当前目录的列表,用mkisofs的-T参数重新生成,主要是为了长文件名称。
(4).discinfo文件是安装介质的识别信息。.treeinfo文件记录不同安装方式安装程序所在的目录结构,如PXE方式时,内核kernel=images/pxeboot/vmlinuz,根文件系统initrd=images/pxeboot/initrd.img。
(5)isolinux目录:有开机引导系统安装的内核(vmlinuz)及RAM镜像(initrd.img),在引导系统时会载入内存,给系统的安装提供一个Linux安装引导平台,文件夹中还有在不同模式下显示信息的boot.msg文件,splash.jpg是特殊格式的引导过程背景图片(640*480)。安装时这个画面上的引导菜单内容在isolinux/isolinux.cfg文件中指定。按Enter会自动进入图形界面安装模式,若按Esc,会显示”boot: “命令提示符,进入用户交互模式,界面上会有各种模式操作提示。键入”linux text”,会进入文本安装模式。
(6)images目录:包含有各种引导镜像。最重要的是引导第二阶段安装需要用到的镜像文件install.img(CentOS 5中是stage2.img),anaconda程序就在这个镜像文件中。另外还有用于制作微型启动光盘的boot.iso(为节省空间CentOS 6中已经删除了,在CentOS 5中是有的),有可放置于USB或其他大容量可引导介质的VFAT分区上,制作引导工具的镜像diskboot.img(CentOS 5中有),也有用于制作PXE安装方式引导介质的pxeboot文件夹等。

系统安装的两个阶段: 继续阅读

第 20 页,共 149 页« 最新...10...181920212223...304050...最旧 »