java高级交流群:37341439(1000人群)欢迎各位技术朋友,互相帮忙,互相学习。
1先得确认要限制的目录是单独的文件系统
df -h /home 测试2如果是单独的文件系统。就需要对该目录添加quota支持,
a:临时方案,电脑重启失效:mount -o remount,usrquota,grpquota /home
b:重启还能用:
编辑fstab文件:vi /etc/fstab
往fstab文件里面添加如下usrquota,grpquota:LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
3:建立quota文件
quotacheck -avug
-a :扫瞄所有在 /etc/mtab 内,吨有 quota 支持的 filesystem,加上此参数后, /mount_point 可丌必写,因为扫瞄所有的 filesystem 了嘛!
-u :针对用户扫瞄档案不目弽的使用情况,会建立 aquota.user
-g :针对群组扫瞄档案不目弽的使用情况,会建立 aquota.group
-v :显示扫瞄过程的信息;
-f :强制扫瞄文件系统,幵写入新的 quota 配置文件 (危险)
-M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。
4:启动quota
quotaon [-avug] 启动
-u :针对使用者启劢 quota (aquota.user)
-g :针对群组启劢 quota (aquota.group)
-v :显示启劢过程的相关讯息;
-a :根据 /etc/mtab 内的 filesystem 讴定启劢有关的 quota ,若丌加 -a 的话, 则后面就需要加上特定的那个 filesystem 喔!
5:quota 关闭
-a :全部的 filesystem 的 quota 都关闭 (根据 /etc/mtab)
-u :仅针对后面接的那个 /mount_point 关闭 user quota
-g :仅针对后面接的那个 /mount_point 关闭 group quota
6:quota编辑
edquota [-u username] [-g groupname]
-u :后面接账号名称。可以进入 quota 的编辑画面 (vi) 去讴定 username 的限制值;
-g :后面接组名。可以进入 quota 的编辑画面 (vi) 去讴定 groupname 的限制值;
-t :可以修改宽限时间。
-p :复制范本。那个 模板账号 为已经存在并设定好 quota 的使用者, 意义为『将 范本账号 这个人的 quota 限制值复制给 新账号 』!
使用如下命令为 myquota1修改quota
edquota -u myquota1
此时会进入vi模式,可以编辑的字段如下:(soft/hard 为 0 时,表示没有限制的意思)
a. 文件系统 (filesystem):说明该限制值是针对哪个文件系统 ( partition);
b. 磁盘容量 (blocks):这个数值是 quota 自己算出杢的,单位为 Kbytes,请不要更动它;
c. soft:磁盘容量 (block) 的 soft 限制值,单位亦为 KB
d. hard:block 的 hard 限制值,单位 KB;
e. 档案数量 (inodes):这是 quota 自己算出来的,单位为个数,请不要更改他;
f. soft:inode 的 soft 限制值;
g. hard:inode 的 hard 限制值;
使用如下命令copy quota的设置
edquota -p myquota1 -u myquota2
使用如下命令设置quota群组:
edquota -g myquotagrp
使用如下命令设置quota宽限时间:
edquota -t
使用命令后会进入vi模式,可以编辑内容如下:
Filesystem Block grace period Inode grace period
/dev/hda3 14days 7days
7:quota报表的查看:
quota [-uvs] [username]
quota [-gvs] [groupname]
-u :后面可以接 username ,表示显示出该用户的 quota 限制值。若不接 username ,表示显示出执行者的 quota 限制值。
-g :后面可接 groupname ,表示显示出该群组的 quota 限制值。
-v :显示每个用户在 filesystem 的 quota 值;
-s :使用 1024 为倍数杢挃定单位,会显示如 M之类的单位!
使用如下命令可以查看用户quota的设定值:
quota -uvs myquota1 myquota2
使用如下命令可以查看群组quota的设定值:
quota -gvs myquotagrp
8:repquota :针对文件系统的限额做报表
repquota -a [-vugs]
-a :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,幵报告 quota 的结果;
-v :输出的数据将所有 filesystem 相关的信息;
-u :显示出用户的 quota 限值 (这是默讣值);
-g :显示出个别群组的 quota 限值。
-s :使用 M, G 为单位显示结果
使用如下命令查看当前文件系统所有的quota设置
repquota -auvs
9:setquota :直接亍命令中设定 quota 限额
setquota [-u|-g] 名称 block(soft) block(hard) \
使用如下命令直接设置quota的值:
setquota -u myquota5 100000 200000 0 0 /home
10:warnquota :对超过限额者发出警告信
修改/etc/warnquota.conf
让系统自动的执行 warnquota
编辑 vi /etc/cron.daily/warnquota
添加如下命令:/usr/sbin/warnquota # 你没有看错!只要这一行,将执行文件以绝对路径的方式写入即可!
Tomcat中使用APR库,其实就是在Tomcat中使用JNI的方式来读取文件以及进行网络传输。可以大大提升Tomcat对静态文件的处理性能,同时如果你使用了HTTPS方式传输的话,也可以提升SSL的处理性能。
一般在Windows下,可以直接下载编译好的二进制版本的dll库文件来使Tomcat启用APR,一般建议拷贝库文件tcnative-1.dll到Tomcat的bin目录下。而在Linux下,可以直接解压和安装bin目录下的tomcat_native.tar.gz文件,编译之前要确保apr库已经安装。
怎么才能判断Tomcat是否已经启用了APR库呢?方法是通过看Tomcat的启动日志:
如果没有启用APR,则启动日志一般有这么一条:
org.apache.coyote.http11.Http11Protocol start
如果启用了APR,则这条日志就会变成:
org.apache.coyote.http11.Http11AprProtocol start
tcnative-1.dll 下载地址:http://tomcat.heanet.ie/native/
调优综述
根据以上分析,如果想要Tomcat达到最优的效果,首先要争取使得操作系统以及网络资源达到最优,并且最好使用高版本的JDK。对于有大量静态页面的系统,采用Apache集成Tomcat的方式,把静态页面交由Apache处理,动态部分交由Tomcat处理,能极大解放Tomcat的处理能力。使用ARP库也能极大的提高Tomcat对静态文件的处理能力。对于并发要求较高的系统,采用Apache加Tomcat集群的方式,将负载分别分担到多个Tomcat上,能很大的提高系统的性能,充分利用硬件资源。同时需要对Tomcat自身进行优化,包括增大内存、调节并发线程数等。
linux下apr的安装
进入tomcat的bin目录
tar
-zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.12-src/jni/native/
./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/java
make
make install
先来看看Linux下对test的解释(使用man test或者info test)
TEST(1) FSF TEST(1) NAME test - check file types and compare values SYNOPSIS test EXPRESSION [ EXPRESSION ] test OPTION DESCRIPTION Exit with the status determined by EXPRESSION. --help display this help and exit --version output version information and exit EXPRESSION is true or false and sets exit status. It is one of: ( EXPRESSION ) EXPRESSION is true ! EXPRESSION EXPRESSION is false EXPRESSION1 -a EXPRESSION2 EXPRESSION1 -o EXPRESSION2 either EXPRESSION1 or EXPRESSION2 is true [-n] STRING the length of STRING is nonzero -z STRING the length of STRING is zero STRING1 = STRING2 the strings are equal STRING1 != STRING2 the strings are not equal INTEGER1 -eq INTEGER2 INTEGER1 is equal to INTEGER2 INTEGER1 -ge INTEGER2 INTEGER1 is greater than or equal to INTEGER2 INTEGER1 -gt INTEGER2 INTEGER1 is greater than INTEGER2 INTEGER1 -le INTEGER2 INTEGER1 is less than or equal to INTEGER2 INTEGER1 -lt INTEGER2 INTEGER1 is less than INTEGER2 INTEGER1 -ne INTEGER2 INTEGER1 is not equal to INTEGER2 FILE1 -ef FILE2 FILE1 and FILE2 have the same device and inode numbers FILE1 -nt FILE2 FILE1 is newer (modification date) than FILE2 FILE1 -ot FILE2 FILE1 is older than FILE2 -b FILE FILE exists and is block special -c FILE FILE exists and is character special -d FILE FILE exists and is a directory -e FILE FILE exists -f FILE FILE exists and is a regular file -g FILE FILE exists and is set-group-ID -h FILE FILE exists and is a symbolic link (same as -L) -G FILE FILE exists and is owned by the effective group ID -k FILE FILE exists and has its sticky bit set -L FILE FILE exists and is a symbolic link (same as -h) -O FILE FILE exists and is owned by the effective user ID -p FILE FILE exists and is a named pipe -r FILE FILE exists and is readable -s FILE FILE exists and has a size greater than zero -S FILE FILE exists and is a socket -t [FD] file descriptor FD (stdout by default) is opened on a terminal -u FILE FILE exists and its set-user-ID bit is set -w FILE FILE exists and is writable -x FILE FILE exists and is executable Beware that parentheses need to be escaped (e.g., by backslashes) for shells. INTEGER may also be -l STRING, which evaluates to the length of STRING. AUTHOR Written by FIXME: ksb and mjb. REPORTING BUGS Report bugs to <bug-coreutils@gnu.org>. COPYRIGHT Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. SEE ALSO The full documentation for test is maintained as a Texinfo manual. If the info and test programs are properly installed at your site, the command info test should give you access to the complete manual. GNU coreutils 4.5.3 February 2003 TEST(1)
再看两个简单的例子:
#!/bin/bash #iftest2 echo -n "Enter your name:" read NAME #did the user just hit return if [ "$NAME" == "" ]; then echo "You did not enter any infomation" else echo "Your name is ${NAME}" #!/bin/bash #ifelif echo -n "Enter your name:" read NAME if [ -z $NAME ] || [ "$NAME" = "" ]; then echo "You did not enter a name." elif [ "$NAME" = "root" ]; then echo "Hello root" elif [ "$NAME" = "chinaitlab" ]; then echo "Hello chinaitlab" else echo "You are not root or wgb,but hi,$NAME" fi
小技巧:
1.Linux对Shell的要求很严格,不要把代码洁癖(比如定义变量的空格、if、while等等中为了美观留下的空格)带到Linux Shell编程中,稍不注意就会报错;
2.多用man或者info,会收到意想不到的收获。
@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]