??xml version="1.0" encoding="utf-8" standalone="yes"?>
<project name="app" default="build" basedir=".">
<property name="app.name" value="hello-ant"/>
<property name="app.jar" value="${app.name}.jar"/>
<property name="app.copyright" value=" Copyright (c) 2005 The Robbie's Software Foundation. All rights reserved."/>
<property name="src.dir" location="src"/>
<property name="build.dir" location="build"/>
<property name="build.docs" value="${build.dir}/docs"/>
<property name="build.docs.api" value="${build.docs}/api"/>
<property name="dist.dir" location="dist"/>
<property name="lib.dir" location="lib"/>
<property environment="env"/> <!--取系l环境变?->
<path id="myclasspath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${env.STRUTS_HOME}">
<include name="lib/*.jar"/>
</fileset>
<!--
pathelement只能d单个的jar文g, 没有fileset方便
<pathelement path="${env.STRUTS_HOME}/lib/struts.jar"/>
-->
</path>
<target name="init" depends="clean">
<echo message="初始?.."/>
<mkdir dir="${build.dir}"/>
</target>
<target name="build" depends="init">
<echo message="~译?.."/>
<javac srcdir="${src.dir}" destdir="${build.dir}" verbose="true">
<classpath refid="myclasspath"/>
<compilerarg value="-Xlint:all"/> <!--|上找了半天才找到的, 用于djavac的编译参?->
</javac>
</target>
<target name="clean">
<echo message="清理?.."/>
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
</target>
<target name="dist" depends="build">
<echo message="制作jar..."/>
<tstamp/>
<mkdir dir="${dist.dir}"/>
<jar destfile="${dist.dir}/app-${DSTAMP}${TSTAMP}.jar" basedir="${build.dir}"/>
</target>
<target name="javadocs" depends="dist">
<echo message="制作api手册..."/>
<mkdir dir="${build.docs.api}"/>
sourcepath="${src.dir}"
defaultexcludes="yes"
destdir="${build.docs.api}"
author="true"
version="true"
use="true"
windowtitle="Docs API">
<doctitle><![CDATA[<h1>tax struts ant API Docs</h1>]]></doctitle>
<bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
</javadoc>
</target>
</project>
别h的build.xml
<!--
=======================================================================
hello-ant 目 ,学习ant工具的第2个build file.
reserved.
-->
<project default="dist" basedir=".">
===================================================================
定义属性(property tasksQ?br /> 最好把用到的\径呀Q名U呀都在q里定义成全局变量
例:定义
<property name="a" value="hello"/>
以后可以这L它:
<property name="b" value="${a}/b"/>
现在:b=="hello/b"
===================================================================
-->
<property environment="env"/><!--取window,unix...的环境变?->
<property name="java.home" value="${env.JAVA_HOME}"/>
<property name="ant.home" value="${env.ANT_HOME}"/>
<property name="app.name" value="hello-ant"/>
<property name="app.jar" value="${app.name}.jar"/>
<property name="app.copyright" value=" Copyright (c) 2002 The Neusoft Software Foundation. All rights reserved."/>
<!--app中src的属?->
<property name="src.dir" value="src" />
<property name="src.main" value="${src.dir}/main"/>
<property name="src.script" value="${src.dir}/script"/>
<property name="lib.dir" value="lib"/>
<property name="build.dir" value="build" />
<property name="build.classes" value="${build.dir}/classes"/>
<property name="build.docs" value="${build.dir}/docs"/>
<property name="build.docs.api" value="${build.docs}/api"/>
<property name="build.lib" value="${build.dir}/lib"/>
<property name="dist.dir" value="dist"/>
<property name="dist.bin" value="${dist.dir}/bin"/>
<property name="dist.docs" value="${dist.dir}/docs"/>
<property name="dist.lib" value="${dist.dir}/lib"/>
<property name="docs.dir" value="docs"/>
定义一l\径以后可以通过id重用q组路径 Q例Q?br /> <javac srcdir="src/main" destdir="build/classes">
<classpath refid="classpath"/>
</javac>
-->
<path id="classpath">
<!--本项目只有一个javaQ用不上classpathQ这里只是做个例?->
<pathelement location="${build.classes}"/>
<pathelement path="${java.home}/lib/tools.jar"/>
</path>
===================================================================
init 准备目录(File Tasks)
主要的目录结构通常是不会变的,一L成他?br /> ===================================================================
-->
<target name="init">
<!--清除以前目录-->
<delete dir="${build.dir}" failonerror="false" />
<delete dir="${dist.dir}" failonerror="false"/>
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes}"/>
<mkdir dir="${build.docs}"/>
<mkdir dir="${build.docs.api}"/>
<mkdir dir="${build.lib}"/>
<mkdir dir="${dist.bin}"/>
<mkdir dir="${dist.lib}"/>
===================================================================
Build the code (Compile Tasks,File Tasks)
===================================================================
-->
<target name="build" depends="init">
<!--~译-->
<javac srcdir="${src.main}" destdir="${build.classes}">
<classpath refid="classpath"/>
</javac>
</target>
===================================================================
打包文档(Archive Tasks)
Create the project jars: xxx1.jar and xxx2.jar
===================================================================
-->
<target name="jars" depends="build">
<jar basedir="${build.classes}" jarfile="${build.lib}/${app.jar}"/>
</target>
===================================================================
Creates the API documentation
===================================================================
-->
<target name="javadocs"
depends="jars"
description="--> creates the API documentation">
<!--copy docs 手册... -->
<copy todir="${build.docs}">
<fileset dir="${docs.dir}"/>
</copy>
sourcepath="${src.main}"
defaultexcludes="yes"
destdir="${build.docs.api}"
author="true"
version="true"
use="true"
windowtitle="Docs API">
<doctitle><![CDATA[<h1>hello ant Docs API</h1>]]></doctitle>
<bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
<tag name="todo" scope="all" description="To do:" />
</javadoc>
</target>
===================================================================
Create the distribution that can run (Archive Tasks)
主要是从各目录中把该copy的copy?br /> ===================================================================
-->
<target name="dist" depends="javadocs">
<!--copy bin 执行文g -->
<copy todir="${dist.bin}">
<fileset dir="${src.script}/"/>
</copy>
<copy todir="${dist.docs}">
<fileset dir="${build.docs}/"/>
</copy>
<!-- copy lib 文g -->
<copy todir="${dist.lib}">
<fileset dir="${build.lib}/"/>
</copy>
<!--
===================================================================
Cleans everything(File Tasks)
例如可以删除build中的文gQ留l你发挥?br /> ===================================================================
-->
aix5.3支持微分区技?所谓微分区是1台机器上装多个OS(操作pȝ),把这台机器上的cpu资源q行划分,然后分配l每一个os使用,最粒度是0.1个cpu.有点cMvmware软g.让一个机器跑多个操作pȝ.q项技术早在ibm的大Z已l实C.只不q最q才在小机和pc机器上发?
TIVOLI是系l管理Y?
关闭aix的命?shutdown ->正常x,关闭所有服? halt -> 相当于直接关闭电?
重启aix:shutdown -Fr
查看出错信息:errpt errpt -a | more -> 分页昄 errpt -a > /tmp/err01 输出到文?
清除错误信息:errclear 0
smit 用鼠标操?smitty 用键盘来操作,一般用smitty为好.
ping -f 全速ping ,利用所有的服务器资源来ping,如果是多个服务器ping一个ip,可以把机器ping?
几个关于盘的名?
lv: logical volume 逻辑?br />pv: physical volume 物理?br />vg: volume group L
pp: physical partition 物理分区
lp: logical partition 逻辑分区
pv对应的是物理盘或者是盘阵列上划分的lun,一个vg最多可以有1016个pp.
pv的上面是vg,一个vg可以包含多个pv.
vg的上面是lv,lv如果不作M处理是裸设?也可以作成文件系l?
lv被分为多个lp,默认情况?lp与pp是一一对应?也可以做成一对多?q样q当于用多个pp来作raid0备䆾.
lsdev -C | grep disk 可以查看物理盘的硬件信?br />lspv 查看pv的信?-p hdisk0 查看具体数据存放的位|?例如,数据在第m到n个pp上面.
lsvg 查看vg的信?-l vg的列?-c 被用的vg -l rootvg 查看rootvg的详?
lslv -m lv1 查看lv1 的lp与pp的映?
getlvcv -AT lv1 看到lv1的控制信?
fsck -y /dev/newlv 查lv.
smit vg 可以理vg
smit lv 理lv
varryonvg rootvg ȀzrootvgL,varryoffvg newvg 使newvgL脱机.
nbpi:number of bytes per inode 每个i节点拥有的字节数,q个参数小,文gpȝ的可用的inode多.如果inode用完,即有剩余空?pȝ也会报空间不?此时要调nbpi的?一般是4k
df -k 中iused 指的是i节点的用情?
讄从cd启动,bootlist -m normal cd0
启动时按ESC+1或者F1,可以q入启动菜单.选择启动方式.
用smitty crfs 创徏完文件系l以后还要mount.
/etc/filesystems 文g记录文gpȝ的信?如想把某个lv映射C同的文gpȝ路径上面,可以直接修改q个文g.
用logform /dev/testloglv lv格式化成jfs的log的格?
file 文g?可以看某个文件的信息,包括文gcd,可执行文?文本文g,{等.
uname -a 可以看到os的信?
fsck 查文件系l的信息,在umount的时候是准确? 相当于windows的磁盘扫?
片整理 smitty jfs
lsfs /root 昄文gpȝ的属?/font>
各个lg的关p?
lsps -a 查看page space的用情?/font>
vgda:vg description area 每个vg的头部存放vg的描qC?
如果包含2个pv,那么W一个pv会在头部和另一个位|存?个vgda,W?个pv也会存放一?
如果包含3个pv,那么每个pv上都?个vgda.
vg的信息在odm中也会存?但必dvgda中的信息一?否则无法varryonvg,有下?个命令来理odm中的vg信息.
importvg:从vgda中读取信息到odm?br />exportvg:从odm中删除vg信息
varryonvg:Ȁz?online)vg
varryoffvg:卸蝲(offline)vg
修改vg的factor,q样可以vg的max pp 从默认的1016 增大1??032,但由于vgda的d不?q些信息都是记录到里面的.所以vg的最大文件数要减??实际上是个等?max pp * max file = 固定的一个?factor增大,实际上是max pp * factor,max file / factor.具体做法:chvg -t 2 rootvg 修改factor?.vgda
用cfgmgr,来刷?来认出新assign的hdisk.
cfgmgr -v 查新讑֤,新硬?
-i /dev/cd0 从光盘自动安装新g驱动.
当作双机?2个服务器server1 ?server2 来连接同一个盘?server1对磁盘分配一个pvid,当第一ơ切换到server2?要用ckdev命o来读出server1配置的pvid.pȝ是通过pvid来识别pv?
ckdev -l hdisk1 -a pv = clear 清除pvid
ckdev -l hdisk1 -a pv = yes 新置pvid
lsdev 查看物理讑֤
lsdev -C 昄所有设备状?br />rmdev -l cd0 逻辑删除 cd0
mkdev -l cd0 安装cd0
rmdev -d -l cd0 删除cd0讑֤驱动
查看cpu的信?br />lsattr -El proc0
lsdev -C | grep proc
查看内存的信?br />lsattr -El mem0
查看光驱的信?br />lsattr -El cd0
查看盘的信?br />lsattr -El hdisk0
lscfg -vp | more 分页看全部硬件信?br />prtconf | more 列出g信息
查看谁在使用cdrom fuser /cdrom -k 直接杀掉用戯E?/font>
telnet的登陆信息存攑֜/etc/motd文g?
x看最q有谁登?用last命o.
查看dp|的信? /etc/security/failedlogin
存放用户密码的文?/etc/security/passwd
用户d需要运行的脚本:
1 /etc/profile
2 /etc/environment 在这个文件中讄中文环境,LANG=zh_CN
3 用户profile ,?U情?
如果是命令行d,则运?home/user/.profile
如果是图形登?则运?/home/user/.dtprofile 需要将ơ文件中,#DTSOURCEPROFILE=TRUE ? L,否则q是使用.profile.
?dev下面?U设?一U是block讑֤,一U是char(字符)讑֤.q取决于不同的应?
vmstat的某些行的解?
vmstat->faults->cs: user calls 用户调用的次?br />cpu->wa: >40 说明ioJ忙
kthr: kernel thread
kthr->r 在运行队列中{待执行的进E?br />b 正在{待io的进E?br />memory->avm:active vitual memory 物理内存+使用的虚拟内??k为单?
page->re:是pin ?pout 的d.
sr:search的内存块?
fr:释放的内存块?
每次作page out?pȝ要搜索物理内存以扑ֈ可以释放的块,sr和fr分别代表搜烦的和通过搜烦扑ֈ的可以释攄??如果2者很接近,说明内存中有很多用于file cache,内存的数量是够用?如果fr/sr的值很?说明内存不够.
tty:代表l端
iostat:
%tm_act 实际transaction的百分比
tps 每秒发生的次?br />kbps 每秒的速率
名词:thrasing: 应用E序频繁交换,Dpagingq多.
/usr/samples/kernel/vmtune -f 120 -F 128
-f 120 代表minfree mem < 120 时要q行page out
-F 128 代表maxfree mem > 128 时要q行page in
-p -P 也跟page out 有关,具体不清?q需明确.
sar->avque:q_的请求数
Ҏ件系l作监视:filemon
filemon -o /tmp/a.txt -O all -v
q行之后pȝ会一直监视文件系l的使用情况q记录日?-T 64000 是用的buffer cache,在大型系l上,q个值可以调?
q行一D|间后,要停掉filemon,使用trcstop 或?kill -9 q程.
从a.txt中可以看C用最频繁的文件等信息,有些cMstatspack的报?
对于后缀是Z的文件用uncompress来解压羃. uncompress a.tar.Z
用strings 命o来看2q制文g
如何调大page space,直接讄对应lv的大?如果对应lv的vgI间不够的话,可以向vg中加盘.
dd的用?dd if=/dev/rnewfs of=/dev/rcopyfs bs=1024 count=10240
bs: block size 块大?1024字节
count: block count 块的数量
if是input file ,of 是output file
Q务切换到后台执行: ctrl+z ,然后 bg+回R
查看后台执行的程?jobs
把后台执行的E序切换到前台执?fg %n n是后台的job ~号
ip抓包工具:iptrace ?tcpdump
iptrace -a a.out
停止iptrace:kill -9
tcpdump -i en1 -w a.out a.out 是输出文?/font>
把进E与cpul定:bindprocessor -U q程?cpuid
bindprocessor -U 12345 0
odm?
env | grep obj
ODMDIR=/etc/objrepos q是odm库的存储路径
在disk0上生成引导区
bosboot -a -d /dev/hdisk0
用kdb 查看os ?dump
ethernet channel ?个网卡绑定到1个ip,可以作网l负载均?
crontab 讄定时d
crontab -l list the crontab
crontab -e edit the crontab
crontab的格?分钟 时 月中的天?月䆾 星期 命o
minute:
0 ?59
hour:
0 ?23
day_of_month:
1 ?31
month:
1 ?12
weekday:
星期日到星期六的 0 ?6 ?br />要在每星期日上午 2 时运?fwlogmgmt 命oQ请下列各行添加至 crontab 文g底部Q?br />0 2 * * 0 /usr/bin/fwlogmgmt -1
发送邮?aix和redhad linux 都默认安装了smtp邮g服务,可以直接linternet发邮?
mail -s "test mail"
haochunpeng@ninetowns.com
< $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert$ORACLE_SID.log
mail -s "test mail"
haochunpeng@ninetowns.com
<<EOF
******** MAIL CONTENT *******
FJLADSFJLAKHFGAL
FJALDSKFJA
FASLJFLASF
*****************************
EOF
有了crontab和mail,可以定时监控数据库,然后把报告发送邮件到理员的信箱.
kill -9 9 是kill命o传送的一个信?一?5个信号可以发?
/etc/ftpusers 限制dftp的用?谁在q个文g里面,谁就Mq去.
|络服务 /etc/inetd.conf h refresh src -d
lslpp -l | grep http 查看安装的Y?br />
查瓶?
利用vmstat iostat 查看M情况,ps aux 可以看到具体q程占用资源的情?
如果是io瓉,可以利用filemon -o /tmp/a.txt -O all; sleep 10;trcstop 来查看io资源的用情?
辨别僵尸q程:ps -ef pid 那列?defunc的ؓ僵尸q程.
几个不错的aix|站:
http://www.douzhe.com
http://www.xfocus.net/articles/200208/433.html