Category Archives: Linux

刚才一条命令让服务器挂掉了

刚才发现服务器启用了ipv6模块,于是想想用不到,关闭吧
上网查了下资料,有人说用命令,我想也没想,就执行了,然后。。挂了。。还好,重新启动后正常了。。
命令是
#rm -f ipv6
 
估计是让系统的网络部分挂了:0
还好没有其他影响,停机了不到20分钟把:)
 
 
DSC00134.JPG

对apache2进行压力测试

测试一下apache2性能。
首先,最基本的,使用apache2的参数
 
ab 参数:
Usage: /usr/sbin/ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make
    -t timelimit    Seconds to max. wait for responses
    -p postfile     File containg data to POST
    -T content-type Content-type header for POSTing
    -v verbosity    How much troubleshooting info to print
    -w              Print out results in HTML tables
    -i              Use HEAD instead of GET
    -x attributes   String to insert as table attributes
    -y attributes   String to insert as tr attributes
    -z attributes   String to insert as td or th attributes
    -C attribute    Add cookie, eg. ‘Apache=1234’ (repeatable)
    -H attribute    Add Arbitrary header line, eg. ‘Accept-Encoding: zop’
                    Inserted after all normal header lines. (repeatable)
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
    -X proxy:port   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -d              Do not show percentiles served table.
    -S              Do not show confidence estimators and warnings.
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -s              Use httpS instead of HTTP (SSL)
    -h              Display usage information (this message)

ex: 要执行 1000 次的 connection, 20 次的 concurrent (并行,同时).

语法: ab -n 1000 -c 20 http://www.syxin.com/index.html

结果

Time taken for tests: 一共花费.(以上 1000 次共多久)

Requests per second: 每秒平均可以处理多少个 connection.

 

 

# ab -n 100000 -c 200 http://www.syxin.com/index.html
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.syxin.com (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Finished 100000 requests

Server Software:        Apache/2.0.54
Server Hostname:        www.syxin.com
Server Port:            80

Document Path:          /index.htm
Document Length:        207 bytes

Concurrency Level:      200
Time taken for tests:   34.889229 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Non-2xx responses:      100013
Total transferred:      40805304 bytes
HTML transferred:       20702691 bytes
Requests per second:    2866.21 [#/sec] (mean)
Time per request:       69.778 [ms] (mean)
Time per request:       0.349 [ms] (mean, across all concurrent requests)
Transfer rate:          1142.13 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   17 277.5      0   20997
Processing:     4   50 281.2     32   25913
Waiting:        4   49 280.1     31   25912
Total:         10   67 436.2     32   28912

Percentage of the requests served within a certain time (ms)
  50%     32
  66%     35
  75%     67
  80%     69
  90%     77
  95%     79
  98%     81
  99%    127
 100%  28912 (longest request)

apt与dpkg详解

 
普通 APT 用法
apt-get install <package>
下载 <package> 以及所有倚赖的包裹,同时进行包裹的安装或升级。如果某个包裹被设置了 hold (停止标志,就会被搁在一边(即不会被升级)。更多 hold 细节请看下面。
 
apt-get remove [–purge] <package>
移除 <package> 以及任何倚赖这个包裹的其它包裹。
–purge 指明这个包裹应该被完全清除 (purged) ,更多信息请看 dpkg -P。
 
apt-get update
升级来自 Debian 镜像的包裹列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 后,必须执行。
 
apt-get upgrade [-u]
升级所以已经安装的包裹为最新可用版本。不会安装新的或移除老的包裹。如果一个包改变了倚赖关系而需要安装一个新的包裹,那么它将不会被升级,而是标志为 hold。apt-get update 不会升级被标志为 hold 的包裹 (这个也就是 hold 的意思)。请看下文如何手动设置包裹为 hold。我建议同时使用 ‘-u’ 选项,因为这样你就能看到哪些包裹将会被升级。
 
apt-get dist-upgrade [-u]
和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包裹来满足倚赖关系。因此具有一定的危险性。
 
apt-cache search <pattern>
搜索满足 <pattern> 的包裹和描述。
 
apt-cache show <package>
显示 <package> 的完整的描述。
 
apt-cache showpkg <package>
显示 <package> 许多细节,以及和其它包裹的关系。
 
dselect
console-apt
aptitude
gnome-apt
APT 的几个图形前端(其中一些在使用前得先安装)。这里 dselect 无疑是最强大的,也是最古老,最难驾驭。
普通 Dpkg 用法
dpkg -i <package.deb>
安装一个 Debian 包裹文件,如你手动下载的文件。
 
dpkg -c <package.deb>
列出 <package.deb> 的内容。
 
dpkg -I <package.deb>
从 <package.deb> 中提取包裹信息。
 
dpkg -r <package>
移除一个已安装的包裹。
 
dpkg -P <package>
完全清除一个已安装的包裹。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。
 
dpkg -L <package>
列出 <package> 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。
 
dpkg -s <package>
显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。
 
dpkg-reconfigure <package>
重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:
 
dpkg-reconfigure –frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)
 
echo "<package> hold" | dpkg –set-selections
设置 <package> 的状态为 hlod (命令行方式)
 
dpkg –get-selections "<package>"
取的 <package> 的当前状态 (命令行方式)
 
支持通配符,如:
Debian:~# dpkg –get-selections *wine*
libwine                                         hold
libwine-alsa                                    hold
libwine-arts                                    hold
libwine-dev                                     hold
libwine-nas                                     hold
libwine-print                                   hold
libwine-twain                                   hold
wine                                            hold
wine+                                           hold
wine-doc                                        hold
wine-utils                                      hold
 
例如:
大家现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,我们可以采用如下方法:
 
方法一:
Debian:~# echo "gaim hold" | dpkg –set-selections
然后用下面命令检查一下:
Debian:~# dpkg –get-selections "gaim"
gaim                                            hold
现在的状态标志是 hold,就不能被升级了。
 
如果想恢复怎么办呢?
Debian:~# echo "gaim install" | dpkg –set-selections
Debian:~# dpkg –get-selections "gaim"
gaim                                            install
这时状态标志又被重置为 install,可以继续升级了。
 
同志们会问,哪个这些状态标志都写在哪个文件中呢?
在 /var/lib/dpkg/status 里,你也可以通过修改这个文件实现 hold。
 
有时你会发现有的软件状态标志是 purge,不要奇怪。
如:事先已经安装了 amsn,然后把它卸了。
apt-get remove –purge amsn
那么状态标志就从 install 变成 purge。
 
方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
Pin: version 0.58*
保存
更详细内容请看:
http://linuxsir.com/bbs/showthread.php?s=&threadid=22601
 
dpkg -S <file>
在包裹数据库中查找 <file>,并告诉你哪个包裹包含了这个文件。(注:查找的是事先已经安装的包裹)
 
从源码建立 deb packagesapt-get source [-b] <package> 下载一个源码的包并解开。你必须在你的 /etc/apt/sources.list 文件里写入一条 deb-src 的记录才能完成这项工作。如果你输入了一个 -b 参数,并且是以 root 的身份,deb 包会被自动的创建。apt-get build-dep <package> 自动下载并安装通过源码创建 <package> 时需要的包。只有apt 0.5以上版本才支持这个功能。现在woody和以上版本包含了这个功能。如果你使有一个旧版本的apt,查找依赖性最简单的方法是查看源码包中 debian/control 这个文件,注意这个路径是相对的,是包内的路径。普通的用法,结合 apt-get source -b,例子 (as root):apt-get build-dep <package>apt-get source -b <package>会下载源码包,建立依赖性,然后尝试编译源码。dpkg-source -x <package.dsc>如果你手工下载了一个程序的源码包,其中包含了几个类似 .orig.tar.gz ,.dsc ,以及 .diff.gz 之类的文件,那么你就可以对 .dsc 文件使用这个命令来 unpack 源码包。dpkg-buildpackage从 Debian 源码树建立一个 deb 包。你必须在 source tree 的主目录才能生效。例如:dpkg-buildpackage -rfakeroot -uc -b这里 ‘-rfakeroot’ 指定命令使用 fakeroot 程序来模仿 root 权限 [来实现所有者(ownership)目的],’-uc’ 表示 "Don’t cryptographically sign the changelog",’-b’ 代表只建立二进制包。debuild一个快速打包脚本类似 dpkg-buildpackage,能自动的识别是否使用 fakeroot,同时为你运行 lintian 和 gpg。修正倚赖关系dpkg –configure –pending如果 dpkg 在 apt-get install upgrade dist-uptradeing 的时候出错退出,尝试使用此命令来配置已经 unpack 的包。然后再用 apt-get install,upgrade,或者 dist-upgrade -f,然后再用 apt-get install,upgrade,或者 dist-upgrade。可能会重复多次,这样通常可以解决大多数的依赖性问题。(同时,如果提示由于某种原因需要某个特定的包裹,你可以常识安装或卸载这个包)apt-get install -fapt-get upgrade -fapt-get dist-upgrade -f 尝试修正上述过程中出现依赖性关系注意 apt-get install -f 不需要 <package> 作为参数。
 
 

ubuntu下内核的升级、卸载

用apt-get dist-upgrade发现内核升级了。
直接安装
 
然后查看/boot/grub/menu.1st
发现以前的内核还在,应该是从安全考虑
 
可既然我正常启动了,就不需要了。留着占空间。卸载!
 
首先,执行
#uname -a
显示了当前的内核
然后用
#dpkg -l|grep linux
来查看当前系统安装了哪几个内核。
 
然后就可以卸载了
一定要确定卸载的包的准确名称
然后
#apt-remove ***(这里是包的准确名称)
不过这里似乎需要加上-purge更好些,是去除残余信息。
 
 
卸载完成后,重新启动,就可以了:0

Unix常用监控和管理命令

ps:查看系统中的进程,Linux中可以使用ps -aux查看所有进程
参数w表示加宽显示的命令行,参数w可以写多次,通常最多写3次,表示加宽3次,这足以显示很长的命令行了。
例如:ps -auxwww
 
top:显示系统内存、cpu使用情况,并可自动刷新进程列表
 
vmstat:显示当前的内存使用情况
 
netstat:显示网络状况,使用参数p可以查看对应的进程号及程序名,
通常使用参数a(显示所有连接情况)和n(不反查域名和服务名),
例如:netstat -anp
 
查看服务器侦听情况,使用:
netstat -an | grep LISTEN
 
查看服务器已建立的连接,使用:
netstat -an | grep ESTABLISHED
 
ifconfig:查看(或设置)网络设备信息
ifconfig -a:查看所有网络设置信息
 
last:显示登录到服务器的情况以及服务器重启情况
 
df:显示硬盘空间及使用情况,Linux下可以带参数h,显示结果更人性化。例如:
df -h  硬盘空间按人性化显示
df -k  硬盘空间按KB显示
df -m  硬盘空间按MB显示
 
w:显示登录到服务器上的用户列表
 
以下几个命令仅针对Linux
 
lsof:显示当前打开的文件列表,包括建立的socket连接等。本命令可以用于程序员检查编写的程序打开的文件数。
 
sysctl:显示(或设置)系统内核参数
sysctl -a  显示所有内核参数
sysctl -w  参数名=参数值
例如:sysctl -w fs.file-max=10240 设置系统允许同时打开的最大文件数为10240。
 
内核参数fs.file-nr包括三个参数值,第一个参数表示系统中曾经同时打开过的文件数峰值,
第二个参数表示空闲(分配后已释放)的文件数,
第三个参数表示可以打开的最大文件数,其值等于fs.file-max。
 
当前打开的文件数 = 第一个参数值 – 第二个参数值
 
例如:
fs.file-nr = 977        223     10240
当前打开的文件数 = 977 – 233 = 744
 
设置内核参数时务必小心,如果设置不当会导致系统异常,甚至当机。
 
ulimit:显示(或设置)用户可以使用的资源限制
 
ulimit -a  显示用户可以使用的资源限制
 
ulimit unlimited  不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
 
ulimit -n  <可以同时打开的文件数>  设置用户可以同时打开的最大文件数(max open files)
例如:ulimit -n 8192
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
 
ulimit -u  <可以运行的最大并发进程数>  设置用户可以同时运行的最大进程数(max user processes)
例如:ulimit -u 1024