Category ArchiveLINUX
LINUX & 其它 & 分析报告 & 技术 03 Nov 2008 05:27 pm
[转]iostat 介绍
2. iostat 结果解析
# iostat -x
Linux 2.4.21-9.30AX (localhost) 2004年07月14日
avg-cpu: %user %nice %sys %idle
3.85 0.00 0.95 95.20
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/hda 1.70 1.70 0.82 0.82 19.88 20.22 9.94 10.11 24.50 11.83 57.81 610.76 99.96
/dev/hda1 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 12.92 0.00 10.77 10.77 0.00
/dev/hda5 0.02 0.00 0.00 0.00 0.03 0.00 0.02 0.00 6.60 0.00 6.44 6.04 0.00
/dev/hda6 0.01 0.38 0.05 0.03 0.43 3.25 0.21 1.62 46.90 0.15 193.96 52.25 0.41
/dev/hda7 1.66 1.33 0.76 0.79 19.41 16.97 9.70 8.49 23.44 0.79 51.13 19.79 3.07
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。
即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),
svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多
也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及
I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明
I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用
得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑
更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是
按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
3. I/O 系统 vs. 超市排队
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当
是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人
购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队
排了。还有就是收银员的速度了,如果碰上了连钱都点不清楚的新手,那就有的
等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人
去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情
比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
4. 一个例子
# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: delta(io)/s = r/s +
w/s = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。
平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上
78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是
同时发出的,那么平均等待时间可以这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + … + 请求总数-1) / 请求总数
应用到上面的例子: 平均等待时间 = 5ms * (1+2+…+28)/29 = 70ms,和
iostat 给出的 78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。
每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),
这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。
一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里
I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =
78.21 * delta(io)/s = 78.21*28.57 = 2232.8,表明每秒内的I/O请求总共需
要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而 iostat
给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有
bug,avgqu-sz 值应为 2.23,而不是 22.35。
以下为服务器情况
bbs(scsi 74G)
top - 17:06:00 up 61 days, 11 min, 3 users, load average: 3.98, 3.72, 3.53
Tasks: 250 total, 3 running, 247 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.4% us, 3.7% sy, 0.0% ni, 74.6% id, 6.2% wa, 0.1% hi, 0.0% si
Mem: 2073976k total, 1922724k used, 151252k free, 36372k buffers
Swap: 2040244k total, 46416k used, 1993828k free, 1007456k cached
avg-cpu: %user %nice %system %iowait %steal %idle
15.17 0.00 3.65 6.21 0.00 75.02
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.13 55.67 12.19 30.50 215.93 690.06 21.22 0.17 3.93 5.22 22.30
search1(sata 80G)
top - 17:06:32 up 4 days, 4:31, 2 users, load average: 1.02, 1.31, 1.19
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
Cpu(s): 32.3% us, 0.9% sy, 0.0% ni, 62.2% id, 4.2% wa, 0.2% hi, 0.2% si
Mem: 2074476k total, 2060532k used, 13944k free, 260740k buffers
Swap: 4096532k total, 16264k used, 4080268k free, 159984k cached
avg-cpu: %user %nice %system %iowait %steal %idle
9.00 0.00 1.62 5.80 0.00 84.02
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
hda 0.05 35.22 18.19 12.87 189.80 384.73 18.50 5.59 179.86 7.44 23.12
search2(scsi 74G *2 )
top - 17:07:15 up 17 days, 21:34, 2 users, load average: 2.21, 2.78, 2.82
Tasks: 155 total, 1 running, 154 sleeping, 0 stopped, 0 zombie
Cpu(s): 13.2% us, 4.7% sy, 0.0% ni, 77.7% id, 4.0% wa, 0.0% hi, 0.3% si
Mem: 2074936k total, 2003708k used, 71228k free, 74260k buffers
Swap: 2031608k total, 342032k used, 1689576k free, 197840k cached
avg-cpu: %user %nice %system %iowait %steal %idle
21.67 0.00 6.25 4.39 0.00 67.94
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.03 6.66 1.77 2.68 86.44 75.11 36.32 0.13 29.63 4.83 2.15
sdb 0.29 69.29 29.10 13.90 340.41 665.65 23.40 0.62 14.43 4.33 18.64
www (sas 15K 146G *2 raid 1)
top - 17:07:56 up 17 days, 20:33, 1 user, load average: 0.16, 0.27, 0.26
Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.1%us, 0.2%sy, 0.0%ni, 98.2%id, 0.4%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8174384k total, 8113268k used, 61116k free, 277316k buffers
Swap: 8191992k total, 140k used, 8191852k free, 6900728k cached
avg-cpu: %user %nice %system %iowait %steal %idle
2.00 0.00 0.79 0.22 0.00 97.09
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.13 31.81 0.41 8.54 19.85 322.79 38.32 0.58 64.46 2.50 2.24
dm-0 0.00 0.00 0.01 3.92 0.40 31.39 8.08 0.19 47.19 1.44 0.57
dm-1 0.00 0.00 0.46 34.35 18.40 274.76 8.42 1.14 32.63 0.53 1.85
dm-2 0.00 0.00 0.00 0.23 0.00 1.82 8.00 0.01 31.41 8.79 0.20
dm-3 0.00 0.00 0.06 0.57 1.00 4.53 8.89 0.02 35.87 3.40 0.21
dm-4 0.00 0.00 0.00 0.00 0.01 0.02 8.00 0.00 15.83 0.35 0.00
dm-5 0.00 0.00 0.00 1.28 0.04 10.27 8.00 0.16 125.45 0.08 0.01
参考:http://blog.chinaunix.net/u/27493/showart.php?id=498055
LINUX & 技术 17 Oct 2008 11:49 am
新上8G的web服务器
硬件
dell1950
5405(四核)*2 (EM64T)
4G*2
SAS 15K 146*2 (raid1)
软件
rhel5(64bit)
nginx 0.6.32
mysql5.1.26rc
php5.2.6
fcgi
xcache1.2.2
nginx 状态
Active connections: 5325
server accepts handled requests
2897229 2897229 12880032
Reading: 15 Writing: 26 Waiting: 5284
系统top
top - 11:36:32 up 15:02, 1 user, load average: 0.09, 0.14, 0.16
Tasks: 188 total, 2 running, 186 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.9%us, 0.7%sy, 0.0%ni, 97.0%id, 0.2%wa, 0.0%hi, 0.1%si,
Mem: 8174384k total, 5894848k used, 2279536k free, 305804k buffe
Swap: 8191992k total, 0k used, 8191992k free, 4748588k cache
应用
大量静态页(php 404 动态生成)
在做迁移时原系统出现坏道导致tar打包失败,load飚到五百多,
让机房重启后ssh也不能上,只能硬上新服务器。
手忙脚乱了3小时将备份的数据移到了新机器。
做迁移一定要多做准备!
LINUX & 技术 17 Oct 2008 11:08 am
CentOS 常见问答集FAQ
CentOS 常见问答集 FAQ
1, CentOS 是什么?
CentOS 是众多 Linux 发行版中的一种。全称: The Community ENTerprise Operating System 。
她是将 Red Hat Enterprise Linux (此后简称 RHEL ) 的源代码再编译,并去除 RHEL 中 Red Hat 公司商标,以及去除 RHEL 中商业组件的 Linux 发行版之一。她的目标是在不违反著作权、商标权等法律的前提下,完全兼容 RHEL 。
2, CentOS 怎样发音?
CentOS 官方推荐的发音是 [sent ou is](森特-欧-爱斯)。
3, 和其他 Linux 发行版比起来 ,CentOS 更适合作为桌面系统吗?
CentOS并不是为桌面系统而设计。
- 红帽企业 Linux AS — 适用于高端的,用于关键业务处理的系统 <–CentOS 的对应版本
- 红帽企业 Linux ES — 适用于小到中型服务器
- 红帽企业 Linux WS — 适用于技术/设计工作站
- 红帽企业 Desktop — 适用于安全,可管理的客户机环境
4 CentOS 5 已经发布了!是否要立刻升级到 CentOS 5 ?
随着 CentOS 5 (于2007年4月12日)的发布,好多正在将各种各样的系统运行在 CentOS 4 下的朋友是不是都已经迫不及待了呢?其实,虽然 CentOS 5 已经(于2007年4月12日)发布了,但 CentOS 4 的生命力还远远没有终结。CentOS 官方对 CentOS 4 (安全更新)的支持,将持续到 2012年2月29日!所以,正在使用 CentOS 4 做服务器的朋友,完全不必担心你的系统会显得很旧 — 到2012年的这几年里,足够我们考虑怎样让当前运行的系统适应新的 CentOS 5 环境,并逐步在 CentOS 4 (安全更新)支持期限内,在保证系统的稳定运作的前提下转移到新环境 — 这总比匆匆忙忙转移到新环境而遇到一大堆由于环境不同而导致的不兼容问题要强得多。
5 在哪里可以找到一些 CentOS 的文档?
CentOS 官方文档: http://www.centos.org/docs/ (官方一般性的配置文档)
Red Hat 官方文档: https://www.redhat.com/docs/ (由于 CentOS 与 RHEL 的兼容,参照 RHEL 的配置文档同样能够得到相应的解决方案)
6 CentOS 各版本及各版本所搭载的软件有哪些不同?
从 CentOS 2 开始的各版本及各版本所搭载软件的不同如下:
| CentOS 2 | CentOS 3.8 | CentOS 4.4 | CentOS 5.0 | |
| 内 核 | 2.4.9 | 2.4.21 | 2.6.9 | 2.6.18 |
| GCC | 2.96 | 3.2.3 | 3.4.6 | 4.1.1 |
| Web 服务器 | apache 1.3.27 | httpd 2.0.46 | httpd 2.0.52 | httpd 2.2.3 |
| PHP | 4.1.2 | 4.3.2 | 4.3.9 | 5.1.6 |
| MySQL | 3.23.58 | 3.23.58 | 4.1.20 | 5.0.22 |
| PostgreSQL | 7.1.3 | 7.3.15 | 7.4.13 | 8.1.4 |
| Python | 1.5.2 | 2.2.3 | 2.3.4 | 2.4.3 |
| Perl | 5.6.1 | 5.8.0 | 5.8.5 | 5.8.8 |
| Samba | 2.2.7 | 3.0.9 | 3.0.10 | 3.0.23c |
| Sendmail | 8.11.6 | 8.12.11 | 8.13.1 | 8.13.8 |
| Postfix | X | 2.0.16 | 2.2.10 | 2.3.3 |
| OpenSSH | 3.1p1 | 3.6.1p2 | 3.9p1 | 4.3p2 |
| OpenSSL | 0.9.6b | 0.9.7a | 0.9.7a | 0.9.8b |
| iptables | 1.2.5 | 1.2.8 | 1.2.11 | 1.3.5 |
| Bind | 9.2.1 | 9.2.4 | 9.2.4 | 9.3.3 |
LINUX & 技术 08 Oct 2008 12:07 pm
linux swap大小
mem < 2G, swap = 2G
mem > 2G, mem < 8G, swap=mem
mem > 8G, swap=8G
不装oracle时2Gswap就可以了
LINUX & Web Server/Apache/Nginx & 技术 28 Aug 2008 02:19 pm
php 控制 nginx 使用404生成html
http://wiki.codemongers.com/NginxHttpCoreModule#error_page
error_page 404 = /404.php;
我没仔细看,漏掉了中间的 “= “, 以为nginx 404 不能再用php 控制header。
在网上转的半天也学到一些东东
fastcgi_hide_header X-Powered-By; # 在header里隐藏php的版本
#fastcgi_pass_header Location;#在header里显示location
#fastcgi_pass_header Status;
fastcgi_pass_header Authorization;
自定义http 状态码
https://calomel.org/nginx.html
使用recursive_error_pages on;递归404来找归档文件或使用memcache
http://marc.info/?l=nginx&m=120127277410400&w=2
http://blog.arh.cc/index.php?/archives/11-Simple-and-clean-nginx.conf.html
LINUX & 技术 09 Jul 2008 02:56 pm
sysstat 安装
This package provides the sar and iostat commands for Linux. Sar and
iostat enable system monitoring of disk, network, and other IO
activity
http://rpmfind.net/ 下打systat
或
http://pagesperso-orange.fr/sebastien.godard/download.html
含src的rpm安装方式
1.执行rpm -i sysstat-5.0.5-1.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp sysstat-5.0.5-1.specs 一个和你的软件包同名的specs文件
4. cd /usr/src/redhat/BUILD/sysstat-5.0.5-1/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install
# wget http://perso.orange.fr/sebastien.godard/sysstat-8.0.4.1.tar.gz
# tar zxvf sysstat-8.0.4.1.tar.gz
# cd sysstat-8.0.4.1
# ./configure
# make
# make install
这个包一但安装下去,一般包括如下的几个命令可以使用。
sar
iostat
sa1
sa2
sadf
mpstat
sadc
sysstat
# crontab -e
*/10 * * * * /usr/lib/sa/sa1 1 1
53 23 * * * /usr/lib/sa/sa2 -A
# /etc/init.d/crond restart
http://www.ixpub.net/thread-749930-1-17.html
让普通用户能够使用sar命令,至少有两种办法:
1、将普通用户加到adm组中;
2、这个例子中,就是这个命令:chmod o+x /usr/lib/sa/sadc
查看软件版本
<pre lang=”Bash” line=”1″ colla=”+”>
[root@localhost sysstat-8.1.6]# sar -V
sysstat version 8.1.6
</pre>
查看系统使用的文件描述符
[root@localhost sysstat-8.1.6]# sar -v 2 3
Linux 2.6.9-5.ELsmp (localhost.localdomain) 10/20/2008 _i686_ (4 CPU)
03:14:44 PM dentunusd file-nr inode-nr pty-nr
03:14:46 PM 57966 810 66883 2
03:14:48 PM 57966 810 66883 2
03:14:50 PM 57966 810 66883 2
Average: 57966 810 66883 2
- 查看CPU使用情况
LINUX & 技术 07 Jul 2008 04:46 pm
linux 下 lynx 安装
Lynx是一个基于文本的浏览器
下载地址
http://ftp.iasi.roedu.net/mirrors/lynx.isc.org/current/
lynx 依赖于openssl
安装lynx
运行下面的命令安装lynx:
./configure --prefix=/usr --libdir=/etc --with-ssl --with-zlib && make && make install && make DOCDIR=/usr/share/doc/lynx-2.8.4/lynx_doc \ HELPDIR=/usr/share/doc/lynx-2.8.4/lynx_help install-doc && make DOCDIR=/usr/share/doc/lynx-2.8.4/lynx_doc \ HELPDIR=/usr/share/doc/lynx-2.8.4/lynx_help install-help && sed s/"t\/etc"/"t\/usr\/share\/doc\/lynx\-2\.8\.4"/ \ /etc/lynx.cfg > /etc/lynx.bak && mv /etc/lynx.bak /etc/lynx.cfg |
命令的解释
–libdir=/etc : For some reason, the 使 lynx 利用prefix 指出的目录作为库文件的目录。我们把它设为 /etc ,所以他的设置文件为 /etc/lynx.cfg.
–with-ssl : 使lynx具有SSL。
–with-zlib : 把zlib添加到lynx.
DOCDIR=… HELPDIR=… : 我们使用这些变量避免在/etc中生成帮助和文档。
sed… mv /etc/lynx.bak /etc/lynx.cfg : This sed 命令改变 /etc/lynx.cfg 文件使他看起来更像是在指定位置的帮助文档。
设置 lynx
设置文件
/etc/lynx.cfg
设置信息
很多设置(例如代理)可以在/etc/lynx.cfg文件中进行设置。
LINUX & 技术 26 Jun 2008 05:21 pm
自动mount分区
fdisk -l 得到需挂载的硬盘/dev/sda1
先mount一下
mkdir /opt && chmod 0777 /opt
mount /dev/sda1 /opt
成功后改/etc/fstab里的LABEL名字的步骤如下:
e2label /dev/sda1 /opt
修改并写入/etc/fstab
例如:
LABEL=/opt /opt ext3 defaults 1 2
重启
LINUX & 技术 25 Jun 2008 09:49 am
linux下安装lucene
apache+tomcat整合
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html
了解
KinoSearch
A Perl search engine library.
http://www.rectangular.com/kinosearch/
Plucene基于java lucene项目创建
安装方法:
perl -MCPAN -e “install Plucene”
perl -MCPAN -e “install Plucene::Simple”
Zend Framework
http://framework.zend.com/download
CLucene
CLucene是C++版的全文检索引擎,完全移植于Lucene,采用 STL 编写。有php扩展,对中文支持不是很好。
http://sourceforge.net/projects/clucene/
Lucene4c
The Lucene4c project is an implementation of the Lucene search engine in C, built on top of the Apache Portable Runtime.
http://incubator.apache.org/lucene4c/
Nutch
Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
http://lucene.apache.org/nutch
http://nutch.sourceforge.net/docs/en/about.html
===============================================
jdk6 http://www.java.net/download/jdk6/6u10/promoted/b24/binaries/jdk-6u10-beta-bin-b24-linux-i586-14_may_2008-rpm.bin
ant http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.tar.gz
lucene http://apache.mirror.phpchina.com/lucene/java/lucene-2.3.2.tar.gz
javac https://javacc.dev.java.net/files/documents/17/26776/javacc-4.0.tar.gz
php-java bridge http://nchc.dl.sourceforge.net/sourceforge/php-java-bridge/php-java-bridge_5.2.2.tar.gz
tomcat http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.tar.gz
使用tomcat可以跳过第六步
一 安装java环境
[root@dev ~]# java -version
java version “1.4.2″
gcj (GCC) 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
[root@dev ~]# rpm -qa |grep java
java-1.4.2-gcj-compat-1.4.2.0-26jpp
注:通常,您不必使用 RPM 卸载 JRE,因为 RPM 可以在您安装新版本时自动卸载旧版本的 JRE!除非您准备永久删除 JRE,否则请跳过本节内容。
[root@dev ~]# rpm -e java-1.4.2-gcj-compat-1.4.2.0-26jpp
http://download.java.net/jdk6/
下载jdk包
[root@dev ~]#wget –limit-rate=20000 http://www.java.net/download/jdk6/6u10/promoted/b24/binaries/jdk-6u10-beta-bin-b24-linux-i586-14_may_2008-rpm.bin
限制20k
[root@dev ~]# chmod 755 jdk-6u10-beta-bin-b24-linux-i586-14_may_2008-rpm.bin\?e\=1212404509\&h\=a151b74ce54cda9cba81a7444944c0ba
[root@dev ~]#./jdk-6u10-beta-bin-b24-linux-i586-14_may_2008-rpm.bin\?e\=1212404509\&h\=a151b74ce54cda9cba81a7444944c0ba
一路空格后健入yes
[root@dev ~]# vi /etc/profile
set JAVA_HOME=/usr/java/jdk1.6.0_10
export JAVA_HOME
set PATH=$PATH:$JAVA_HOME/bin
export PATH
set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH
bourne shell家族中赋值不用set,这个郁闷了我好久没找到变量无效的原因。
[root@dev ~]# source /etc/profile
用文本编辑器新建一个Test.java文件,在其中输入以下代码并保存:
public class Test {
public static void main(String args[]) {
System.out.println(”A new jdk test !”);
}
}
编译:在shell终端执行命令 javac Test.java
如果出错可能是javac还没装,先接着下面安装javac后,再返回到这里测试。
运行:在shell终端执行命令 java Test
当shell下出现“A new jdk test !”字样则jdk运行正常。
二 安装ant
http://ant.apache.org/bindownload.cgi
ant是一个基于JAVA的自动化脚本引擎,脚本格式为XML。除了做JAVA编译相关任务外,ANT还可以通过插件实现很多应用的调用,比make脚本来说还要好维护一些。
[root@dev ~]# wget http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.tar.gz
[root@dev ~]# tar zxvf apache-ant-1.7.0-bin.tar.gz
[root@dev ~]# mv apache-ant-1.7.0 /usr/local/
[root@dev ~]# vi /etc/profile
在JAVA_HOME前加上
ANT_HOME=/usr/local/apache-ant-1.7.0
export ANT_HOME
编辑
set PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
[root@dev ~]# source /etc/profile
三 安装lucene
wget http://apache.mirror.phpchina.com/lucene/java/lucene-2.3.2.tar.gz
不是lucene-2.3.2-src.tar.gz哦,这个无lucene-demos-2.3.2.jar
[root@dev ~]# tar zxvf lucene-2.3.2.tar.gz
[root@dev ~]# mv lucene-2.3.2 /usr/local
四 安装javac
https://javacc.dev.java.net/files/documents/17/26776/javacc-4.0.tar.gz
[root@dev ~]# wget https://javacc.dev.java.net/files/documents/17/26776/javacc-4.0.tar.gz
[root@dev ~]# gunzip javacc-4.0.tar.gz
[root@dev ~]# tar -xvf javacc-4.0.tar
[root@dev ~]# mv javacc-4.0 /usr/local/
[root@dev ~]# cd /usr/local/lucene-2.3.2
[root@dev ~]# echo javacc.home=/usr/local/javacc-4.0 > ~/build.properties
[root@dev ~]# ant
五 测试lucene
再修改/etc/profile,在CLASSPATH前加上
LUCENE_HOME=/usr/local/lucene-2.3.2
修改变量
CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${LUCENE_HOME}/lucene-core-2.3.2.jar:${LUCENE_HOME}/lucene-demos-2.3.2.jar
#source /etc/profile
生成索引
[root@dev ~]# cd ./src/demo
[root@dev demo]# java org.apache.lucene.demo.IndexFiles /usr/local/lucene-2.3.2/docs
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/lucene/demo/IndexFiles
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.demo.IndexFiles
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: org.apache.lucene.demo.IndexFiles. Program will exit.
出现以上错误估计是CLASSPATH没写对。
搜索…,输入以下命令就会出现搜索提示符。
[root@dev demo]# java org.apache.lucene.demo.SearchFiles
六 安装php-java bridge
php/Java bridge
What is php/Java bridge?
The php/Java bridge is an optimized, XML-based network protocol, which can be used to connect a native script engine, PHP, with a Java or ECMA 335 virtual machine. It is more than 50 times faster than local RPC via SOAP, requires less resources on the web-server side, and it is faster and more reliable than direct communication via the Java Native Interface. read more…
http://php-java-bridge.sourceforge.net
[root@dev ~]# wget –limit-rate=15000 http://nchc.dl.sourceforge.net/sourceforge/php-java-bridge/php-java-bridge_5.2.2.tar.gz
[root@dev php-java-bridge-5.2.2]# /opt/lampp/bin/phpize && ./configure –disable-servlet –with-java=/usr/java/jdk1.6.0_10 && make CFLAGS=”-m32″ && make install
./configure: line 2969: php-config: command not found
./configure: line 2970: php-config: command not found
configure: error: Cannot find php-config. Please use –with-php-config=PATH
缺少xampp开发包和php-config 路径设置
http://sourceforge.net/project/showfiles.php?group_id=61776&package_id=60248
[root@dev ~]# tar -zxvf xampp-linux-devel-xxx.tar.gz
[root@dev ~]# mv lampp/* /opt/lampp/
mv: cannot overwrite directory `/opt/lampp/lib’
mv: cannot overwrite directory `/opt/lampp/modules’
mv: cannot overwrite directory `/opt/lampp/share’
手动一个个移啦
[root@dev php-java-bridge-5.2.2]# /opt/lampp/bin/phpize && ./configure –disable-servlet –with-php-config=/opt/lampp/bin/php-config –with-java=/usr/java/jdk1.6.0_10 && make CFLAGS=”-m32″ && make install
make[1]: *** [php/java/bridge/JavaBridgeIllegalStateException.o] Error 1
make[1]: Leaving directory `/root/php-java-bridge-5.2.2/server’
make: *** [/root/php-java-bridge-5.2.2/modules/stamp] Error 2
报两个错,不去理它
[root@dev php-java-bridge-5.2.2]# cp modules/java.so /opt/lampp/modules/
vi /opt/lampp/etc/php.ini
加上
extension=”java.so”
[root@dev php-java-bridge-5.2.2]# /opt/lampp/lampp start
Starting XAMPP for Linux 1.6.1…
PHP Warning: PHP Startup: Unable to load dynamic library ‘/opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/java.so’ - /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/java.so: cannot open shared object file: No such file or directory in Unknown on line 0
[root@dev php-java-bridge-5.2.2]# cp modules/java.so /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/
[root@dev php-java-bridge-5.2.2]# /opt/lampp/lampp start
Starting XAMPP for Linux 1.6.1…
Exception in thread “main” java.lang.NoClassDefFoundError: php/java/bridge/Standalone
Caused by: java.lang.ClassNotFoundException: php.java.bridge.Standalone
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: php.java.bridge.Standalone. Program will exit.
不行咯,换成用tomcat
七 安装tomcat
http://tomcat.apache.org/tomcat-6.0-doc/setup.html
[root@dev ~]# wget –limit-rate=20000 http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.tar.gz
[root@dev ~]# tar -zxvf apache-tomcat-6.0.16.tar.gz
[root@dev ~]# mv apache-tomcat-6.0.16 /usr/local/apache-tomcat
[root@dev ~]# vi /etc/profile
export JDK_HOME=${JAVA_HOME}
export CATALINA_BASE=/usr/local/apache-tomcat
export CATALINA_HOME=/usr/local/apache-tomcat
[root@dev ~]# source /etc/profile
[root@dev ~]# vi /etc/rc.d/rc.local
/usr/local/apache-tomcat/bin/startup.sh
vi /usr/local/apache-tomcat/conf/server.xml
port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
URIEncoding=”UTF-8″#增加此行
redirectPort=”8443″>
<Host name=”localhost“ appBase=”webapps“ unpackWARs=”true“ autoDeploy=”true“ xmlValidation=”false“ xmlNamespaceAware=”false“>
中增加以下内容,将weblucene设为根目录
<Context path=”“ docBase=”/usr/local/apache-tomcat/webapps/weblucene“ reloadable=”true“ debug=”0“ crossContext=”true“ />
server.xml默认有下面一行:
这样允许任何人只要telnet到服务器的8005端口,输入”SHUTDOWN”,然后回车,服务器立即就被关掉了。
从安全的角度上考虑,我们需要把这个shutdown指令改成一个别人不容易猜测的字符串。
例如修改如下:
,这样就只有在telnet到8006,并且输入”lizongbo”才能够关闭Tomcat.
注意:这个修改不影响shutdown.bat的执行。运行shutdown.bat一样可以关闭服务器。
参考Tomcat安全文档英文链接:http://jakarta.apache.org/tomcat/faq/security.html#8005
还有两个问题需要注意:
1、 对于tomcat3.1中,屏蔽目录文件自动列出的方法是什么?
缺省情况下,如果你访问tomcat下的一个web应用,那么如果你输入的是一个目录名,而且该目录下没有一个可用的welcome文件,那么tomcat会将该目录下的所有文件列出来,如果你想屏蔽这个缺省行为,那么可以修改conf/web.xml文件,将其中的:
default
org.apache.catalina.servlets.DefaultServlet
debug
0
listings
true
1修改为:
default
org.apache.catalina.servlets.DefaultServlet
debug
0
listings
false
1 默认的shutdown.sh一执行就死机,用网上的代替
http://noroot.info/node/16153
# cd /usr/local/apache-tomcat/bin
# mv shutdown.sh shutdown.sh.old
# vi /usr/local/apache-tomcat/bin/shutdown.sh //创建新的shutdown.sh关闭服务脚本
<coolcode>
#!/bin/sh
TOMCAT_PID=`/bin/netstat -anp|/bin/grep :8080 |/bin/gawk ‘{print $7}’ |/bin/gawk -F [/] ‘{print $1}’`
/bin/kill -9 $TOMCAT_PID 2>/dev/null
if [ $? -ne 0 ];then
echo ‘Tomcat is not running.’
else
echo “Succeed to shutdown tomcat.”
fi
</coolcode>
# chmod a+x shutdown.sh //为新建的脚本文件增加执行权限
八 apache整合
可以避免打8080
编辑apache http.conf
<virtualhost 192.168.54.96>
servername devs.c1gstudio.com
ProxyPass / balancer://cluster/
<Proxy balancer://cluster/>
BalancerMember http://192.168.54.96:8080/
</Proxy>
</virtualhost>
LINUX & 技术 12 Jun 2008 10:57 am
Linux的时间设置与同步 (NTP)
http://x.86516.com/index.php/uid-69-action-viewspace-itemid-4537
http://www.pool.ntp.org是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个个NTP Server
asia的服务器地址
http://support.ntp.org/bin/view/Servers/NTPPoolServers
第二步要做的就是在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间. 这里我们可以用ntpdate命令
代码:
# ntpdate 0.uk.pool.ntp.org
6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec # ntpdate 0.pool.ntp.org 6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec
现在我们就来创建NTP的配置文件了, 它就是/etc/ntp.conf. 我们只需要加入上面的NTP Server和一个driftfile就可以了
代码:
# vi /etc/ntp.conf
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
driftfile /var/lib/ntp/ntp.drift
非常的简单. 接下来我们就启动NTP Server,并且设置其在开机后自动运行
代码:
# /etc/init.d/ntpd/start # chkconfig –level 35 ntpd on
http://www.ntp.org/downloads.html
Guide to install NTP for Unix/Linux
- gzip -d ntp-4.1.72.tar.gz
- tar -xvf ntp-4.1.72.tar
- cd ntp-4.1.72
- ./configure
- make
- make check
- make install
修改 Linux 系统时区
1. 查看当前时区
# vi /etc/sysconfig/clock
2. 修改设置时区
方法(1) # tzselect 方法(2 仅限于RedHat Linux 和 CentOS) # timeconfig
3. 复制相应的时区文件,替换系统默认时区
# cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime 对于中国服务器则执行: # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4. 将当前时间写入BIOS永久生效(避免重启后失效)
# hwclock
参考:http://kb.discuz.net/index.php?title=%E4%BF%AE%E6%94%B9_Linux_%E7%B3%BB%E7%BB%9F%E6%97%B6%E5%8C%BA