Linux Apache Mysql Php jQuery
2010-04-06 14:05:37 | 作者:jerryji | 评论:1 | 标签:ngnix 50x错误 upstream timed out (110: Connection timed out) while reading response header from upstream 解决办法
记得以前介绍过在Ubuntu 9.04中开启Ctrl+Alt+Backspace这篇文章,那个方法现在在Ubuntu 9.10中已经不适用了,但我们还是很容易的通过以下方法来开启这个组合键:
依次打开
系统–>首选项–>键盘,点击布局选项卡,然后点击左下角的”布局选项”
找到Key sequence to kill the X server,勾选上
Contrl+Alt+BackSpace
或者 直接在命令行输入
setxkbmap -option terminate:ctrl_alt_bksp
2010-03-30 17:19:31 | 作者:jerryji | 评论:0 | 标签:Ubuntu 9.10中Ctrl+Alt+Backspace启用方法
1 .要用apt-get的方式安装,最好,也可能是必须先运行下面在命令升级自己的系统,我的就只能先升级后才能安装mysql5 + Apache2 + PHP5的。
我在没升级前运行sudo apt-get install apache2 php5 mysql-server 是没有用的。而如果你找的源不好或是你的网络不稳定的话,你也有可能升级不成。这样的话,你想用apt-get的方式来安装一些软件时可能是不能安装的。
#sudo apt-get update
#sudo apt-get dist-upgrade
2.安装:
#sudo apt-get install mysql-server
安装上mysql5,安装的时候会提示输入root密码
#sudo apt-get install apache2
安装apache2
#sudo apt-get install php5
安装php5
#sudo apt-get install php5-mysql
安装php的mysql模块
#sudo apt-get install php5-gd
安装GD库
在运行上面的命令的时候,可以留心看下libapache2-mod-auth-mysql(安装apache2时可能会安上)和libapache2-mod-php5,如果看到安上了就不用再单独安装了。
#sudo gedit /etc/mysql/my.conf #编辑my.conf
apache2的配置文件-apache2.conf(路径:/etc/apache2/apache2.conf)
#sudo gedit /etc/apache2/apache2.conf #编辑apache2.conf
PHP的配置文件-php.ini:(路径:/etc/php5/apache2/php.ini)
#sudo gedit /etc/php5/apache2/php.ini #编辑php.ini
此时这三个文件暂时不用编辑,如为了安全起见和优化,是一定要编辑的。具体的大家可参观其它资料,此篇暂不多说!!
4 . 安装phpmyadmin
#sudo apt-get install phpmyadmin
安装完毕可测试:http://127.0.0.1/phpmyadmin 当出来界面就行了,暂时先别登录,等改下你的PHPMYADMIN的配置文件(config.inc.php)再登陆。
终端输入:sudo gedit /etc/phpmyadmin/config.inc.php
找到$cfg['Servers'][$i]['password']= ”;
改成:$cfg['Servers'][$i]['password']= ‘123456′;
‘123456‘是刚才设置的mysql的密码。
如果无法解析PHPMYADMIN
默认安装在 /usr/share/phpmyadmin,作个链接到 /var/www/ 目录下,
命令为:sudo ln -s /usr/share/phpmyadmin/ /var/www/,再使用 http://localhost/phpmyadmin 即可以访问。
5 . 此时最好重新启动计算机,(在网看到有人这样说,因是第二次安装也就照做了)打开浏览器http://localhost/phpmyadmin/
用户名输入root,再输入刚改的密码,然后执行
可以看到在win下那可亲的phpmyadmin面貌了。
小结:
apache2的操作命令:
启动:sudo /etc/init.d/apache2 start
重启:sudo /etc/init.d/apache2 restart
关闭:sudo /etc/init.d/apache2 stop
apache2的默认主目录:/var/www/
如要修改,
sudo gedit /etc/phpmyadmin/config.inc.php,
将DocumentRoot设置为新路径,同时将Directory节点也改为新路径。
2010-03-30 15:13:40 | 作者:jerryji | 评论:0 | 标签:UBUNTU 9.10下安装LAMP环境
一、使用更新源的國內鏡像
CentOS 安裝完畢,首先應該修改更新源,並升級到最新的系統。
國內速度較快的常用更新源:
http://mirror.be10.com/centos/
http://centos.candishosting.com.cn/
http://ftp.sjtu.edu.cn/centos/
http://ftp.hostrino.com/pub/centos/
http://mirrors.ta139.com/centos/
http://ftp.iasi.roedu.net/mirrors/centos.org/centos/
首先備份CentOS-Base.repo,然後再編輯 yum 的配置文件
[admingu@googe ~]$ sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[admingu@googe ~]$ sudo vi /etc/yum.repos.d/CentOS-Base.repo
| [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ baseurl=http://centos.candishosting.com.cn/$releasever/os/$basearch/ http://mirrors.ta139.com/centos/$releasever/os/$basearch/ http://mirror.be10.com/centos/$releasever/os/$basearch/ http://ftp.sjtu.edu.cn/centos/$releasever/os/$basearch/ http://ftp.hostrino.com/pub/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ baseurl=http://centos.candishosting.com.cn/$releasever/updates/$basearch/ http://mirrors.ta139.com/centos/$releasever/updates/$basearch/ http://mirror.be10.com/centos/$releasever/updates/$basearch/ http://ftp.sjtu.edu.cn/centos/$releasever/updates/$basearch/ http://ftp.hostrino.com/pub/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #packages used/produced in the build but not released [addons] name=CentOS-$releasever - Addons #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons #baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/ baseurl=http://centos.candishosting.com.cn/$releasever/addons/$basearch/ http://mirrors.ta139.com/centos/$releasever/addons/$basearch/ http://mirror.be10.com/centos/$releasever/addons/$basearch/ http://ftp.sjtu.edu.cn/centos/$releasever/addons/$basearch/ http://ftp.hostrino.com/pub/centos/$releasever/addons/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ baseurl=http://centos.candishosting.com.cn/$releasever/extras/$basearch/ http://mirrors.ta139.com/centos/$releasever/extras/$basearch/ http://mirror.be10.com/centos/$releasever/extras/$basearch/ http://ftp.sjtu.edu.cn/centos/$releasever/extras/$basearch/ http://ftp.hostrino.com/pub/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ baseurl=http://centos.candishosting.com.cn/$releasever/centosplus/$basearch/ http://mirrors.ta139.com/centos/$releasever/centosplus/$basearch/ http://mirror.be10.com/centos/$releasever/centosplus/$basearch/ http://ftp.sjtu.edu.cn/centos/$releasever/centosplus/$basearch/ http://ftp.hostrino.com/pub/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/ baseurl=http://centos.candishosting.com.cn/$releasever/contrib/$basearch/ http://mirrors.ta139.com/centos/$releasever/contrib/$basearch/ http://mirror.be10.com/centos/$releasever/contrib/$basearch/ http://ftp.sjtu.edu.cn/centos/$releasever/contrib/$basearch/ http://ftp.hostrino.com/pub/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 |
其中:
repositoryid:用於指定一個倉庫
name:用於指定易讀的倉庫名稱
baseurl:用於指定本倉庫的URL,可以是以下的3種類型,如http,ftp,file
mirrorlist:用於指定倉庫的鏡像站點
enable:用於指定是否使用本倉庫,默認值為1,即可用。
gpgcheck:用於指定是否檢查套裝軟體的GPG簽名。
gpgkey:用於指定GPG簽名文件的URL。
執行命令:
[admingu@googe ~]$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
二、使用非官方更新源
下面以安裝rpmforge和DAG套裝軟體為例添加非官方更新源
I、添加rmpforge軟體庫
1)到http://dag.wieers.com/rpm/packages/rpmforge-release/搜尋適用於RHEL5 /CentOS5的套裝軟體。
2)下載適用於RHEL5/CentOS5的套裝軟體。
[admingu@googe ~]$ sudo wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
[admingu@googe ~]$ sudo rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
[admingu@googe ~]$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-*
安裝rpmforge-release套裝軟體之後,就可以看到/etc/yum.repos.d/rpmforge.repo文件,以後yum就 可以使用這個更新源了。
II、添加DAG更新倉庫 。//這個庫我更新時總是出現問題,望達人幫我一下!
1)在/etc/yum.repos.d/下建立dag.repo
2)編輯dag.repo
[admingu@googe ~]$ sudo vi /etc/yum.repos.d/dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el5/en/i386/dag/
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
保存退出。
然後導入Key,
[admingu@googe ~]$ wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
[admingu@googe ~]$ sudo rpm --import RPM-GPG-KEY.dag.txt
[admingu@googe ~]$ sudo rm -f RPM-GPG-KEY.dag.txt //這個可以先移除也可以不移除
以下是好友Nick提供的解決方法,非常感謝他!
在定義 yum 非官方庫 dag.repo 後,使用 yum 安裝非官方庫裏定義的軟體是,如果出現錯誤:
Reading repository metadata in from local files
primary.xml.gz 100% |=========================| 883 kB 00:59
http://apt.sw.be/redhat/el5/en/i386/dag/repodata/primary.xml.gz: [Errno -1] Metadata file does not match checksum
Trying other mirror.
Error: failure: repodata/primary.xml.gz from dag: [Errno 256] No more mirrors to try.
這個錯誤應該是因為"/var/cache/yum/dag/”裏的 primary.xml.gz 不能通過校驗導致的。(暫時找不到原因,用多線程軟體下載就沒問題,如'myget')
這個錯誤我自己的 解決方法是:是用軟體'myget'下載 primary.xml.gz 到 "/var/cache/yum/dag/” ;然後再重新用yum安裝軟體。
三、使用如下命令更新到最新系統
# yum upgrade
四、安裝必要的軟體工具
# yum install wget bzip2 unzip zip nmap tree lynx fileutils ncftp lftp
若您需要在本機編譯源代碼的軟體,請安裝開發工具組的套裝軟體
# yum groupinstall "Development Tools"
<script. type="text/javascript"><!--google_ad_client = "pub-8157613744109761";
/* 728x90, 創建於 09-1-14 */
google_ad_slot = "1763164732";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script. type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
2010-03-29 13:03:19 | 作者:jerryji | 评论:0 | 标签:CentOS5.2設置更新源
是不是想让系统直接启动到Windows,不出现Linux的Grub(或LILO)引导界面或者是在Windows中删除了Linux分区后无法正确启 动Windows,而停留在“grub>”提示符处,怎么办? 请往下看,这里给你提供几种实用的方法:
Solution 0
要是手头没有DOS启动盘,可以使用windowXP系统盘,按R进 入到故障恢复台,然后使用命令 FIXMBR 多数情况也能够恢复,没有DOS启动盘,一般采取此方法
用DOS命令fdisk恢复主引导扇区MBR(Main/Master Boot Record)
用光盘引导到DOS命令行下,执行:"fdisk /mbr"即可。
Solution 2
在Linux系统中,恢复MBR。(如果你还能登陆到Linux系统中的话)
在终端的命令提示符后输入: "dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1"
注意,其中bs(buffer size)是指重写的字节数。为什么不是512呢?主引导扇区是一个扇区(512字节呀),因为我们只是想通过扇面的命令修复系统MBR的引导或删除 Grub/LILO引导;而不是恢复整个主引导扇区。所以我们只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。 boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬 盘DPT表也破坏掉。那就坏事了!!! (MBR的512字节中前446字节为引导程序,紧跟着后面64字节为分区表,最后面2个字节为结束标记)
Solution 3
如果你的fdisk不好使,或者Linux已经不能使用,可以使用Clear MBR 0.9来清除MBR:
下载Clear MBR 0.9 ,直接运行执行“Clear MBR”即可(说明,我并没有下载到,所以这种方式没有试)
Solution 4
Linux的分区已经被你从Windows中删除,系统启动后停在“grub>”提示符处。
在“grub>”提示符后输入:“rootnoverify (hd0,0)” 回车。//将第一块硬盘(hd0)的第一个分区(0)设为根分区/root设备,但不加载文件系统。
在“grub>”提示符后输入:“chainloader +1” 回车。//将启动引导权转交给当前分区的首扇区(Windows系统所在分区的首扇区)。
在“grub>”提示符后输入:“boot” 回车。系统将启动Windows。如果不成功,则表明 (hd0,0) 不是 Windows 系统所在分区,再从第一步开始试一下“root (hd0,1)/root (hd0,2)/root (hd0,3)/...”,总之这样一定可以引导启动你的Windows系统。
好了,进入Windows了,请采用Solution 3的方法清除MBR。
2010-03-28 15:32:53 | 作者:jerryji | 评论:0 | 标签:如何删除grub,修复windows引导
2010-03-27 16:26:47 | 作者:jerryji | 评论:0 | 标签:ubuntu9.10--grub--引导 windows的解决办法
移动光标
上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行
下:j nj:向下移动n行
左:h nh:向左移动n列
右:l nl:向右移动n列
w:光标以单词向前移动 nw:光标向前移动n个单词 光标到单词的第一个字母上
b:与w相反
e: 光标以单词向前移动 ne:光标向前移动n个单词 光标到单词的最后一个字母上
ge:与e相反
$:移动光标到行尾 n$:移动到第n行的行尾
0(Num):移动光标到行首
^:移动光标到行首第一个非空字符上去
f<a>:移动光标到当前行的字符a上,nf<a>移动光标到当前行的第n个a字符上
F:相反
%:移动到与制匹配的括号上去(),{},[],<>等。
nG:移动到第n行上 G:到最后一行
CTRL+G 得到当前光标在文件中的位置
向前翻页:CTRL+F
向下移动半屏:CTRL+G
向后翻页:CTRL+B
存盘:
:q! :不存盘退出
:e! :放弃修改文件内容,重新载入该文件编辑
:wq :存盘退出
dw:删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dnw:删除n个单词
dne:也可,只是删除到单词尾
dnl:向右删除n个字母
dnh:向左删除n个字母
dnj:向下删除n行
dnk:向上删除n行
d$:删除当前光标到改行的行尾的字母
dd:删除一行
cnw[word]:将n个word改变为word
cc:改变整行
C$:改变到行尾
J: 删除换行符,将光标移到改行,按shift+j删除行尾的换行符,下一行接上来了.
u: 撤销前一次的操作
shif+u(U):撤销对该行的所有操作。
:set showmode :设置显示工作模式
o:在当前行的下面另起一行
O(shift+o):在当前行的上面另起一行
nk或nj:光标向上或向下移n行,n为数字
an!【ESC】:在行后面加n个感叹号(!)
nx:执行n次x(删除)操作
ZZ:保存当前文档并退出VIM
:help :查看帮助文档,在这之中,按CTRL+] 进入超连接,按CTRL+O 返回。
:help subject :看某一主题的帮助,ZZ 退出帮助
:set number / set nonumber :显示/不显示行号
:set ruler /set noruler:显示/不显示标尺
/pattern 正方向搜索一个字符模式
?pattern 反方向搜索一个字符模式
然后按n 继续向下找
把光标放到某个单词上面,然后按×号键,表示查找这个单词
查找整个单词:/\<word\>
:set hlsearch 高亮显示查找到的单词
:set nohlsearch 关闭改功能
m[a-z]:在文中做标记,标记号可为a-z的26个字母,用`a可以移动到标记a处
r:替换当前字符
nr字符:替换当前n个字符
查找替换:
way1:
/【word】 :查找某个word
cw【newword】:替换为新word
n: 继续查找
.: 执行替换
way2:
:s/string1/string2/g:在一行中将string1替换为string2,g表示执行 用c表示需要确认
:num1,num2 s/string1/string2/g:在行num1至num2中间将string1替换为string2
:1,$ s/string1/string2/g:在全文中将string1替换为string2
v:进入visual 模式
【ESC】退出
V:shift+v 进入行的visual 模式
CTRL+V:进如块操作模式用o和O改变选择的边的大小。
粘贴:p,这是粘贴用x或d删除的文本
复制:
ynw:复制n个单词
yy:复制一行
ynl:复制n个字符
y$:复制当前光标至行尾处
nyy:拷贝n行
完了用p粘贴
:split:分割一个窗口
:split file.c :为另一个文件file.c分隔窗口
:nsplit file.c: 为另一个文件file.c分隔窗口,并指定其行数
CTRL+W在窗口中切换
:close:关闭当前窗口
在所有行插入相同的内容如include<,操作方法如下:
将光标移到开始插入的位置,按CTRL+V进入VISUAL模式,选择好模块后
按I(shift+i),后插入要插入的文本,按[ESC]完成。
:read file.c 将文件file.c的内容插入到当前光标所在的下面
:0read file.c 将文件file.c的内容插入到当前文件的开始处(第0行)
:nread file.c 将文件file.c的内容插入到当前文件的第n行后面
:read !cmd :将外部命令cmd的输出插如到当前光标所在的下面
:n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去
CTRL+L刷新屏幕
shift + < 左移一行
shift + > 右移一行
u: undo
CTRL+R: re-do
J: 合并一行
CTRL+p 自动完成功能
CTRL+g 查看当前文件全路径
q[a-z] 开始记录但前开始的操作为宏,名称可为【a-z】,然后用q终止录制宏。
用reg显示当前定义的所有的宏,用@[a-z]来在当前光标处执行宏[a-z].
2010-03-17 23:16:41 | 作者:jerryji | 评论:0 | 标签:Vim命令
1、LINUX下FTP添加一个用户:
useradd -d /var/www/html uername
2、设置username密码:
passwd username
结果出现了:500 OOPS: cannot change错误,解决方法如下:
su - 切换到root用户
getsebool -a | grep ftp 把ftp_home_dir的值改成on
setsebool -P ftp_home_dir on
getsebool -a | grep ftp 运行结果:
[root@kiriyamablevins ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> on
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
httpd_enable_ftp_server --> off
2010-03-15 14:47:40 | 作者:jerry | 评论:0 | 标签:FTP useradd 500 OOPS: cannot change
1.重新编译Apache。
Apache的默认配置不是为了最大化性能而设置的,而是考虑到向后兼容性和平台兼容性的问题。因此很多2.x的新特性没有能够体现出来。在编译的时候,需要加入一些参数,增加的这些模块应该会大幅的提高性能。
既然重新编译,建议使用最新的2.2版,里面有些部分对性能有不少加强。
2.编译的时候建议加入下面的参数
./buildconf
./configure \
--with-mpm=worker \
--enable-cache--enable-disk-cache--enable-mem-cache--enable-file-cache \
--enable-nonportable-atomics \
--enable-mods-shared=most
2.1 Multi-Processing Modules (MPM)
--with-mpm={prefork,worker}
这个是设置Apache的多任务处理的。prefork是指每个连接一个进程,也就是多进程并行处理;而worker是多线程并行处理。支持多线程处理,本来是Apache
2的一大改进,可是为了和以前的兼容,所以对于Unix默认的都是prefork,这个改进并没有体现出来。而这个设置只能在编译的时候进行优化,这也是为什么一定要重新编译一下apache的原因。
apache文档这么说:
“·worker MPM
使用多进程,每个进程包含多线程的方式。每个线程一次处理一个连接。worker对于高流量的服务器通常是一个好的选择,因为它比prefork MPM占用更少的内存。
·prefork MPM
使 用多进程,每个进程只包含1个线程的方式。每个进程一次处理一个连接。在许多系统上,prefork具有与worker相媲美的速度,但是它会占用更多的 内存。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平 台而言,它也更容易调试一些。”
这么说确实没有什么必要用prefork,刚才看了一下FC5,也是用的prefork模式。所以重新编译apache是肯定的了。我还不知道哪个Linux发布版本的apache默认是worker的呢。
为了设置MPM为worker需要设置:
--with-mpm=worker
2.2 Caching
mod_cache是从mod_proxy分离出来的。在以前apache
1.3的时候,就已经在mod_proxy中支持缓冲技术了。现在是为了加强缓冲能力,从mod_proxy中独立出来,而mod_proxy被完全重写了,更强调代理的作用了。
从Apache
2.2开始,mod_cache将不再是实验模块而作为稳定模块发布了。为了能够支持cache,需要在编译的时候,启用它,因为默认caching是禁用的。我估计是因为以前还是实验模块,所以还是为了向后兼容的问题,暂时是默认禁用的。
mod_cache一共有三种mod_mem_cache,mod_disk_cache和mod_file_cache。具体怎么用可以看apache的文档,虽然是英文,不过不是很难懂:
http://httpd.apache.org/docs/2.2/caching.html
网上也有一些关于mod_cache的中文配置文章可以参考。
总值为了能够用cache,需要在编译的时候设置:
--enable-cache--enable-disk-cache--enable-mem-cache--enable-file-cache
2.3 原子操作
有些模块中,如mod_cache中使用了一些原子操作,多任务中的互斥量操作之类的。为了可移植性,一般都是用互斥量环绕条件语句来判断来实现。比如:
acquire_lock(mutex);
if( a==0){
a=3;
}
release_lock(mutex);
加锁的目的是确保if和赋值不会被其他线程中断。可是有些cpu中提供了一条指令来做判断赋值,不需要这么复杂的操作,比如486加入的指令:
cmpxchg [edx], eax
先测试[edx]是否为0,如果为0,就让[edx]=eax。
通 过硬件保证了中间不会被中断。要知道一旦用到了互斥量,那么线程切换的等待就避免不了,这对于线程太多并且有公用数据的程序来说,影响性能的因素之一。因 此一旦得到了硬件的直接支持。在多线程程序的处理上,就少了很多的锁,也就提高了一定的性能。但是,不是所有的cpu都有这样的指令,因此默认情况下还是 使用锁的老办法。除非编译时明确声明:
--enable-nonportable-atomics=yes
需要注意的是,这样编译后,只能用在486及其以上的计算机中。我估计一般的服务器不是跑在386上吧。呵呵,对了,也尽量不要是64位的系统。
2.4
允许后期动态加载模块
--enable-mods-shared=most
这将编译大部分的模块为动态模块,这样后期可以动态的调入。默认情况竟然是不允许,太令我诧异了。呵呵。我感觉对于典型的多进程应用,模块就应该是动态加载,这样比较节省内存空间,反正大家用得都差不多的模块。
3. 检查
至于是否还想加其他的模块你就看着办吧,一般来说这就够了。
需 要提一下的是,现在apache在2.2种引入了一种新的MPM来提高性能,叫做event。可惜还在实验状态,未能稳定。event是 worker的变种,和线程类似,也是多线程模型,不同的是,它将做数据处理的线程和等待连接的线程分开,以此试图解决KeepAlive大了也不是,小 了也不是的性能调整问题。
event是使用一个比较小的线程来等待所有的socket,包括等候连接的socket和那些 KeepAlive的连接。一旦这些socket有任何发送HTTP请求了,这个等候的线程,就会这个socket交给真正做数据处理的线程进行处理,那 个线程处理完成后,会将这个socket交还给这个守候线程。
这样,即使有大量的KeepAlive连接,也不用担心性能损耗,因为只有一 个简单的线程来负责维护这些KeepAlive的连接,而那些真正做任务处理的线程则在一个HTTP响应处理完成后就退回到可用线程池或者被释放了,因此 很省资源。这个思路很好,现在还在实验,如果试验成功,估计会成为 2.4或者2.6的稳定MPM。
3.1 httpd -l
通过这条命令可以检查mpm是prefork还是worker。很不幸默认是prefork,FC5显示如下:
Compiledinmodules:
core.c
prefork.c
http_core.c
mod_so.c
3.2 apachectl -l
通过这条指令可以检查cache模块的加载情况,很不幸,默认是啥都没有。
4. KeepAlive
我 看到KeepAlive默认设置为On,KeepAliveTimeout默认是5秒。这个设置的含义时说,对于HTTP/1.1的客户端来说,将会尽量 的保持客户的HTTP连接,通过一个连接传送多份HTTP请求<->响应。这样对于客户端来说,可以提高50%左右的响应时间,而对于服务端 来说则降低了更多个连接的开销。不过这个依赖于客户端是否想保持连接。我知道IE默认是保持连接的,当你打开100个图片的网站时,IE 好像只开 2个连接,通过这两个连接传送数据,而不是开100个连接。KeepAliveTimeout时说这次连接结束后开始计时,如果5秒内没有重新发送 HTTP请求,就断掉连接。这个值可以稍微大一点,但是不可太大,否则会出现同时等候过多的连接,导致过多限制资源,而使服务器性能下降。可以调调看。
2009-07-27 11:48:46 | 作者:jerry | 评论:0 | 标签:Apache 性能优化
2009-03-17 17:26:46 | 作者:jerry | 评论:0 | 标签:fc8 Zendstudio