wrk — 小巧轻盈的 http 性能测试工具.

via: http://zjumty.iteye.com/blog/2221040

测试先行是软件系统质量保证的有效手段. 在单元测试方面, 我们有非常成熟的 xUnit 方案. 在集成测试方面, 我们 selenium 等自动化方案. 在性能测试方面也有很多成熟的工具, 比如 LoadRunner, Jmeter 等. 但是很多工具都是给专门的性能测试人员使用的, 功能虽然强大, 但是安装和操作不太方便. 作为开发人员, 我们有些时候想快速验证我们的解决方案是不是存在性能问题, 或者在并发情况下是否有意想不到的问题.  安装 LoadRunner 这样工具, 录制脚本很麻烦, 用起来就像在用大炮打蚊子.

wrk 是一个很简单的 http 性能测试工具. 也可以叫做 http benchmark 工具. 只有一个命令行, 就能做很多基本的 http 性能测试.

wrk 的开源的, 代码在 github 上. https://github.com/wg/wrk

首先要说的一点是: wrk 只能运行在 Unix 类的系统上. 比如 linux, mac, solaris 等. 也只能在这些系统上编译.

这里不得不说一下, 为什么很多人说 mac 是最好的开发环境. 不是因为使用 mac 逼格有多高. 而是你可以同时得到 windows 和 linux 的好处. 多数 linux 下的开发工具都可以在 mac 上使用. 很多都是预编译好的, 有些只需要编译一下就能用.

wrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事件驱动框架.  确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知.

要用 wrk, 首先要编译 wrk.
你的机器上需要已经安装了 git 和基本的c编译环境. wrk 本身是用 c 写的. 代码很少. 并且没有使用很多第三方库.  所以编译基本不会遇到什么问题.

git clone https://github.com/wg/wrk.git  
cd wrk  
make

就 ok了.
make 成功以后在目录下有一个 wrk 文件. 就是它了. 你可以把这个文件复制到其他目录, 比如 bin 目录. 或者就这个目录下执行.

如果编译过程中出现:

src/wrk.h:11:25: fatal error: openssl/ssl.h: No such file or directory  
 #include <openssl/ssl.h>

是因为系统中没有安装openssl的库.

sudo apt-get install libssl-dev

sudo yum install  openssl-devel

我们先来做一个简单的性能测试:

wrk -t12 -c100 -d30s http://www.baidu.com

30秒钟结束以后可以看到如下输出:

Running 30s test @ http://www.baidu.com  
  12 threads and 100 connections  
  Thread Stats   Avg      Stdev     Max   +/- Stdev  
    Latency   538.64ms  368.66ms   1.99s    77.33%  
    Req/Sec    15.62     10.28    80.00     75.35%  
  5073 requests in 30.09s, 75.28MB read  
  Socket errors: connect 0, read 5, write 0, timeout 64  
Requests/sec:    168.59  
Transfer/sec:      2.50MB

先解释一下输出:
12 threads and 100 connections
这个能看懂英文的都知道啥意思: 用12个线程模拟100个连接.
对应的参数 -t 和 -c 可以控制这两个参数.

一般线程数不宜过多. 核数的2到4倍足够了. 多了反而因为线程切换过多造成效率降低. 因为 wrk 不是使用每个连接一个线程的模型, 而是通过异步网络 io 提升并发量. 所以网络通信不会阻塞线程执行. 这也是 wrk 可以用很少的线程模拟大量网路连接的原因. 而现在很多性能工具并没有采用这种方式, 而是采用提高线程数来实现高并发. 所以并发量一旦设的很高, 测试机自身压力就很大. 测试效果反而下降.

下面是线程统计:

Thread Stats   Avg      Stdev     Max   +/- Stdev  
  Latency   538.64ms  368.66ms   1.99s    77.33%  
  Req/Sec    15.62     10.28    80.00     75.35%

Latency: 可以理解为响应时间, 有平均值, 标准偏差, 最大值, 正负一个标准差占比.
Req/Sec: 每个线程每秒钟的完成的请求数, 同样有平均值, 标准偏差, 最大值, 正负一个标准差占比.

一般我们来说我们主要关注平均值和最大值. 标准差如果太大说明样本本身离散程度比较高. 有可能系统性能波动很大.

接下来:

5073 requests in 30.09s, 75.28MB read  
  Socket errors: connect 0, read 5, write 0, timeout 64  
Requests/sec:    168.59  
Transfer/sec:      2.50MB

30秒钟总共完成请求数和读取数据量.
然后是错误统计, 上面的统计可以看到, 5个读错误, 64个超时.
然后是所以线程总共平均每秒钟完成168个请求. 每秒钟读取2.5兆数据量.

可以看到, 相对于专业性能测试工具. wrk 的统计信息是非常简单的. 但是这些信息基本上足够我们判断系统是否有问题了.

wrk 默认超时时间是1秒. 这个有点短. 我一般设置为30秒. 这个看上去合理一点.
如果这样执行命令:

/wrk -t12 -c100 -d30s -T30s http://www.baidu.com

可以看到超时数就大大降低了, Socket errors 那行没有了:

Running 30s test @ http://www.baidu.com  
  12 threads and 100 connections  
  Thread Stats   Avg      Stdev     Max   +/- Stdev  
    Latency     1.16s     1.61s   14.42s    86.52%  
    Req/Sec    22.59     19.31   108.00     70.98%  
  4534 requests in 30.10s, 67.25MB read  
Requests/sec:    150.61  
Transfer/sec:      2.23MB

通过 -d 可以设置测试的持续时间. 一般只要不是太短都是可以的. 看你自己的忍耐程度了.
时间越长样本越准确. 如果想测试系统的持续抗压能力, 采用 loadrunner 这样的专业测试工具会更好一点.

想看看响应时间的分布情况可以加上–latency参数:

wrk -t12 -c100 -d30s -T30s --latency http://www.baidu.com
Running 30s test @ http://www.baidu.com  
  12 threads and 100 connections  
  Thread Stats   Avg      Stdev     Max   +/- Stdev  
    Latency     1.22s     1.88s   17.59s    89.70%  
    Req/Sec    14.47      9.92    98.00     77.06%  
  Latency Distribution  
     50%  522.18ms  
     75%    1.17s  
     90%    3.22s  
     99%    8.87s  
  3887 requests in 30.09s, 57.82MB read  
  Socket errors: connect 0, read 2, write 0, timeout 0  
Requests/sec:    129.19  
Transfer/sec:      1.92MB

可以看到50%在0.5秒以内, %75在1.2s 以内. 看上去还不错.

看到这里可能有人会说了, HTTP 请求不会总是这么简单的, 通常我们会有 POST,GET 等多个 method, 会有 Header, 会有 body 等.

在我第一次知道有 wrk 这个工具的时候他确实还不太完善, 要想测试一些复杂的请求还有点难度. 现在 wrk 支持 lua 脚本. 在这个脚本里你可以修改 method, header, body, 可以对 response 做一下自定义的分析. 因为是 lua 脚本, 其实这给了你无限的可能. 但是这样一个强大的功能如果不谨慎使用, 会降低测试端的性能, 测试结果也受到影响.

一般修改method, header, body不会影响测试端性能, 但是操作 request, response 就要格外谨慎了.

我们通过一些测试场景在看看怎么使用 lua 脚本.

POST + header + body.

首先创建一个 post.lua 的文件:

wrk.method = "POST"  
wrk.body   = "foo=bar&baz=quux"  
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

就这三行就可以了, 当然 headers 可以加入任意多的内容.
然后执行:

wrk -t12 -c100 -d30s -T30s --script=post.lua --latency http://www.baidu.com

当然百度可能不接受这个 post 请求.

对 wrk 对象的修改全局只会执行一次.
通过 wrk 的源代码可以看到 wrk 对象的源代码有如下属性:

local wrk = {  
   scheme  = "http",  
   host    = "localhost",  
   port    = nil,  
   method  = "GET",  
   path    = "/",  
   headers = {},  
   body    = nil,  
   thread  = nil,  
}

schema, host, port, path 这些, 我们一般都是通过 wrk 命令行参数来指定.

wrk 提供的几个 lua 的 hook 函数:

setup 函数
这个函数在目标 IP 地址已经解析完, 并且所有 thread 已经生成, 但是还没有开始时被调用. 每个线程执行一次这个函数.
可以通过thread:get(name),  thread:set(name, value)设置线程级别的变量.

init 函数
每次请求发送之前被调用.
可以接受 wrk 命令行的额外参数. 通过 — 指定.

delay函数
这个函数返回一个数值, 在这次请求执行完以后延迟多长时间执行下一个请求. 可以对应 thinking time 的场景.

request函数
通过这个函数可以每次请求之前修改本次请求的属性. 返回一个字符串. 这个函数要慎用, 会影响测试端性能.

response函数
每次请求返回以后被调用. 可以根据响应内容做特殊处理, 比如遇到特殊响应停止执行测试, 或输出到控制台等等.

function response(status, headers, body)  
   if status ~= 200 then  
      print(body)  
      wrk.thread:stop()  
   end  
end

done函数
在所有请求执行完以后调用, 一般用于自定义统计结果.

done = function(summary, latency, requests)  
   io.write("------------------------------\n")  
   for _, p in pairs({ 50, 90, 99, 99.999 }) do  
      n = latency:percentile(p)  
      io.write(string.format("%g%%,%d\n", p, n))  
   end  
end

下面是 wrk 源代码中给出的完整例子:

local counter = 1  
local threads = {}  
  
function setup(thread)  
   thread:set("id", counter)  
   table.insert(threads, thread)  
   counter = counter + 1  
end  
  
function init(args)  
   requests  = 0  
   responses = 0  
  
   local msg = "thread %d created"  
   print(msg:format(id))  
end  
  
function request()  
   requests = requests + 1  
   return wrk.request()  
end  
  
function response(status, headers, body)  
   responses = responses + 1  
end  
  
function done(summary, latency, requests)  
   for index, thread in ipairs(threads) do  
      local id        = thread:get("id")  
      local requests  = thread:get("requests")  
      local responses = thread:get("responses")  
      local msg = "thread %d made %d requests and got %d responses"  
      print(msg:format(id, requests, responses))  
   end  
end

测试复合场景时, 也可以通过 lua 实现访问多个 url.
例如这个复杂的 lua 脚本, 随机读取 paths.txt 文件中的 url 列表, 然后访问.:

counter = 1  
  
math.randomseed(os.time())  
math.random(); math.random(); math.random()  
  
function file_exists(file)  
  local f = io.open(file, "rb")  
  if f then f:close() end  
  return f ~= nil  
end  
  
function shuffle(paths)  
  local j, k  
  local n = #paths  
  for i = 1, n do  
    j, k = math.random(n), math.random(n)  
    paths[j], paths[k] = paths[k], paths[j]  
  end  
  return paths  
end  
  
function non_empty_lines_from(file)  
  if not file_exists(file) then return {} end  
  lines = {}  
  for line in io.lines(file) do  
    if not (line == '') then  
      lines[#lines + 1] = line  
    end  
  end  
  return shuffle(lines)  
end  
  
paths = non_empty_lines_from("paths.txt")  
  
if #paths <= 0 then  
  print("multiplepaths: No paths found. You have to create a file paths.txt with one path per line")  
  os.exit()  
end  
  
print("multiplepaths: Found " .. #paths .. " paths")  
  
request = function()  
    path = paths[counter]  
    counter = counter + 1  
    if counter > #paths then  
      counter = 1  
    end  
    return wrk.format(nil, path)  
end

关于 cookie
有些时候我们需要模拟一些通过 cookie 传递数据的场景. wrk 并没有特殊支持, 可以通过 wrk.headers[“Cookie”]=”xxxxx”实现.
下面是在网上找的一个离职, 取 Response的cookie作为后续请求的cookie

function getCookie(cookies, name)  
  local start = string.find(cookies, name .. "=")  
  
  if start == nil then  
    return nil  
  end  
  
  return string.sub(cookies, start + #name + 1, string.find(cookies, ";", start) - 1)  
end  
  
response = function(status, headers, body)  
  local token = getCookie(headers["Set-Cookie"], "token")  
    
  if token ~= nil then  
    wrk.headers["Cookie"] = "token=" .. token  
  end  
end

wrk 本身的定位不是用来替换 loadrunner 这样的专业性能测试工具的. 其实有这些功能已经完全能应付平时开发过程中的一些性能验证了.

Ubuntu自动更新相关设置

  1. 设置自动更新
apt-get install unattended-upgrades

安装好unattended-upgrades后,需要配置:

/etc/apt/apt.conf.d/50unattended-upgrades 
Unattended-Upgrade::Allowed-Origins {
//      "${distro_id}:${distro_codename}-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};
 
注释掉相关选项。
然后,编辑文件:/etc/apt/apt.conf.d/10periodic

APT::Periodic::Update-Package-Lists "1";   //显示更新包列表  0表示停用设置
APT::Periodic::Download-Upgradeable-Packages "1"; //下载更新包  0表示停用设置
APT::Periodic::AutocleanInterval "7"; // 7日自动删除 
APT::Periodic::Unattended-Upgrade "1"; //启用自动更新 0表示停用自动更新

或者直接使用: dpkg-reconfigure -plow unattended-upgrades 进行相关更新

  1. 禁用相关的包更新,例如Linux-Kernel.
sudo apt-mark hold <package_name>
sudo apt-mark hold linux-image-generic linux-headers-generic

 

CentOS 7 64bit Minimal安装后的初步10项优化和配置

1. 更新系统并安装必备的组件

安装这些之后会大大方便今后安装其他应用是碰到的依赖包问题。其中net-tools是为了提供dig, nslookup, ipconfig等命令,方便配置CentOS 7初始化网络环境。如果不安装这个,在CentOS 7中,可以使用ip addr命令来代替ipconfig进行当前ip地址查询。

2. 添加源(repository)REMI & EPEL

yum安装时,要想安装比较新的版本软件,可以试试这两个源。都有一些国内镜像,我添加的EPEL是阿里云镜像的。

这是适合CentOS 6的源

cd /tmp && wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && wget http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm -Uvh remi-release-6.rpm epel-release-6-8.noarch.rpm

 

真正适合CentOS 7的epel和remi源

rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

如果国外没法用,那用国内的镜像

#中科大镜像源
rpm -Uvh http://mirrors.ustc.edu.cn/centos/7.0.1406/extras/x86_64/Packages/epel-release-7-5.noarch.rpm
 
#浙大源
rpm -Uvh http://mirrors.zju.edu.cn/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
 
#上海交大源
rpm -Uvh http://ftp.sjtu.edu.cn/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
 
#sohu镜像源,更新比较慢
rpm -Uvh http://mirrors.sohu.com/fedora-epel/7/x86_64/e/epel-release-7-2.noarch.rpm

使用方法:

yum --enablerepo=remi install php mysql php-mysql mysql-server phpmyadmin
 
或者
 
yum --enablerepo=epel install php mysql php-mysql mysql-server phpmyadmin

 

3. FQDN配置,全称Fully Qualified Domain Name

有些软件,特别是邮件系统对这个要求比较高。

vi /etc/hosts
 
127.0.0.1 localhost.localdomain localhost geeker
::1 localhost.localdomain localhost geeker
 
vi /etc/sysconfig/network
HOSTNAME=geeker
 
设置好之后,查询是否完整
 
hostname -f
  1. 关闭Selinux

这是Centos系统的安装机制,单单往往导致很多软件无法正常安装,让我们关掉它吧!

/etc/selinux/config
在 SELINUX=enforcing 前面加个#号注释掉它
#SELINUX=enforcing
然后新加一行
SELINUX=disabled
#SELINUXTYPE=targeted #注释掉这行

保存,退出,重启系统,搞定。

不想重启,可以使用

setenforce 0 #使配置立即生效

 

5. CentOS 7的防火墙关闭和iptables安装

CentOS 7.0默认使用的是firewall作为防火墙,但可能一下子很难适应,让我们先改回原先的iptables防火墙吧!

关闭CentOS 7的firewall

systemctl stop firewalld.servic #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

安装iptables防火墙

启动iptables防火墙

systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

6. 本地SMTP邮件发送功能(

很多软件和服务可以用到这个功能给用户发送通知邮件,需要配置一下。

最好加上一个认证,使用Postfix + Saslauthd

yum remove sendmail   #如果有原先的sendmail,先移除
yum install postfix  
vi /etc/postfix/main.cf   #编辑postfix主配置文件
useradd itgeeker   #增加用户
passwd itgeeker   #设置用户密码
yum install cyrus-sasl*
 
/bin/systemctl restart saslauthd.service && /bin/systemctl restart postfix.service   #启动postfix和saslauth服务

最好用telnet测试一下,前面安装的telnet就发挥作用了

telnet localhost smtp
ehlo localhost
mail from:
rcpt to:<alanljj@qq.com>
data
Welcome to itgeeker mail server
.
quit
#查看邮件内容
less /var/log/maillog
cd /root/Maildir/new #注意M要大写
ll
cat ***** #*代表列出的文件名,可以查看新的邮件内容
vi /var/log/maillog
Tips小技巧:
有时候telnet登陆后就退不出来了ctrl+c也不管用此时可以使用ctl+] 切换,然后quit退出。

7.  CentOS 7时间同步及更改

和之前基本一样:

date
 
yum install ntpdate -y
ntpdate time.windows.com && hwclock -w
 
#连网更新时间,如果成功,将系统时间,写入BOIS
 
hwclock -w 或 hwclock --systohc
 
date -s 20150119
date -s 17:28:00

8. Shell登陆操作显示中文乱码问题(和CentOS 6一样,问题还是存在)

方法一:

vi /etc/sysconfig/i18n 文件中修改LANG的设置为:
#LANG="en_US.UTF-8"
#SYSFONT="latarcyrheb-sun16"
LANG="zh_CN.GBK"
LANGUAGE="zh_CN.GBK:zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
 
然后在/etc/profile文件中增加export LC_ALL=zh_CN.GBK内容。使得全部的LC*都统一了。
 
重启主机

方法二: 更改shell的显示语言

ITGeeker技术奇客使用的是xshell,直接在当前链接的属性-终端-选择UTF-8为编码即可。如果你经常使用变换使用shell,那就用第一种方法吧。

9. FTP服务安装(vsftpd安装)

为主机开通FTP服务还是非常有必要的,我们为主机快速安装vsftpd吧。

可以参考详细教程 CentOS6.5 64bit如何安装配置FTP服务(vsftpd

yum install vsftpd -y
vi /etc/vsftpd/vsftpd.conf
 
#记得CentOS 7启动命令有所不同
 
systemctl restart vsftpd
systemctl enable vsftpd

 

Ubuntu(Linux)中添加Windows和Mac的字体

Debian 和 Ubuntu 下对中文支持比较好的字体有: fonts-droid、ttf-wqy-zenhei 和 ttf-wqy-microhei 等,除了文泉驿系列字体外,比较流行的免费中文字体还有文鼎提供的楷体和上海宋,包名分别是: fonts-arphic-ukai 和 fonts-arphic-uming。

sudo apt-get install fonts-droid ttf-wqy-zenhei ttf-wqy-microhei fonts-arphic-ukai fonts-arphic-uming

注: 系统字体可以手动安装, /usr/share/fonts/

1、准备好Windows和Mac中的字体包,自己从系统中提取或者网上下载都可以。

需要注意的是并非所有的自己都能在Ubuntu中顺利的安装,比如Windows中.fon 格式的字体和Mac 中的.otf自己都要先移除。

2、将需要安装的字体分别放在放 ubuntu 系统中的 ~/WinFonts 和~/MacFonts中

3、在 /usr/share/fonts/ 中创建新的winfonts文件夹 和macfonts文件夹。

sudo mkdir /usr/share/fonts/winfonts 
sudo mkdir /usr/share/fonts/macfonts

4、将~/WinFonts 的字体复制到 /usr/share/fonts/winfonts 中,将~/MacFonts的字体复制到 /usr/share/fonts/macfonts中

sudo cp ~/WinFonts/* /usr/share/fonts/winfonts 
sudo cp ~/MacFonts/* /usr/share/fonts/macfonts

5、修改新植入的字体的访问权限
先进入该文件夹:

cd /usr/share/fonts/winfonts

然后执行如下命令:

sudo chmod 744 *

macfonts文件夹下的内容采取相同的处理方式

6、生成核心字体信息

sudo mkfontscale 
sudo mkfontdir 
sudo fc-cache -f -v

注销系统之后,就可以使用 windows 及Mac系统中的字体了。

Find的使用

1. 想查看当前文件夹及子文件夹里有没有文件名为“abc”的文件

# find . -name abc

. :表示当前目录

-name:表示要根据名称查找

2. 想查看当前文件夹及子文件夹里有没有”xyz”目录

# find . -type d -name xyz

-type:表示设定类型,d表示文件夹类型,可以替换为f(普通文件)、l(链接文件)

3. 想找出当前文件夹及子文件夹里所有后缀是”.txt”的文件

# find . -name “*.txt”

4. 想查找当前目录及其子文件夹中“roc”用户自己的文件有哪些

# find . -user roc

-user:用于设定所属用户的名称,此处可替换为-group,即所属用户组的名称

5. 想查找当前文件夹及子文件夹里权限设定为755的所有文件

# find . -perm 755

-perm:用于设定权限

6. 想查找当前文件夹及子文件夹里的同时含有b字符和3字符的文件:用到正则表达式技术

# find . -regex ‘.*b.*3’

-regex:表示使用正则表达式进行匹配。请注意,此命令会和“全路径”进行匹配,也就是说前面要加.*,因为输出结果中会有“./”符号。

7. 如果想全部输出用find命令查找出的”*.abc”文件的内容

# find . -type f -name “*.abc” -exec cat {} \;

-exec 表示由find找到的匹配项会作为“-exec后面设定的命令”的参数

可以使用-ok代替-exec,这样对每个匹配项进行操作,都会要求用户确认(y为是,n为否)

命令最后的{} \; 别忘了写,其中{}代表用find查找到的结果中的每一个查找项。

8. 查找当前目录下在5分钟内被访问过的文件

# find . -amin -5

访问过用amin,修改过用mmin,文件状态改变过用cmin

精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime

在5分钟之内的用-5,在5分钟以上的用+5

9. 想查找当前目录及子目录下文件大小大于10M的所有文件

# find . -size +10000000c

-size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G。

10. 上述所有的find命令都是查找当前目录及其子目录。如果不想深入到子目录中,而是只查找当前一层目录,则可以:

# find . -maxdepth 1 -name “*.c”

 

via : http://roclinux.cn

DIG挖出DNS的秘密

【初次见面】

我相信使用nslookup的同学一定比使用dig的同学多,所以还是有必要花些时间给大家介绍一下dig的。dig,和nslookup作用有些类似,都是DNS查询工具。dig,其实是一个缩写,即Domain Information Groper。

一些专业的DNS管理员在追查DNS问题时,都乐于使用dig命令,是看中了dig设置灵活、输出清晰、功能强大的特点。

【最简单的dig用法】

最简单的dig用法,当然就是直接输入dig按回车。

[root@ali ~]# dig 

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63220
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;.				IN	NS

;; ANSWER SECTION:
.			250097	IN	NS	c.root-servers.net.
.			250097	IN	NS	k.root-servers.net.
.			250097	IN	NS	e.root-servers.net.
.			250097	IN	NS	h.root-servers.net.
.			250097	IN	NS	m.root-servers.net.
.			250097	IN	NS	d.root-servers.net.
.			250097	IN	NS	g.root-servers.net.
.			250097	IN	NS	a.root-servers.net.
.			250097	IN	NS	b.root-servers.net.
.			250097	IN	NS	f.root-servers.net.
.			250097	IN	NS	i.root-servers.net.
.			250097	IN	NS	j.root-servers.net.
.			250097	IN	NS	l.root-servers.net.

;; Query time: 1 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: 五 3月 04 15:05:17 CST 2016
;; MSG SIZE  rcvd: 228

 

从上面的输出,你一定观察到了,当直接使用dig命令,不加任何参数和选项时,dig会向默认的上连DNS服务器查询“.”(根域)的NS记录。

【dig加个点】

刚才直接输入dig,这次我们在后面加上一个“.”,看看结果和刚才有何区别:

[root@ali ~]# dig .

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49950
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;.				IN	A

;; AUTHORITY SECTION:
.			10376	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2016030400 1800 900 604800 86400

;; Query time: 1 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: 五 3月 04 15:05:36 CST 2016
;; MSG SIZE  rcvd: 92

 

【我想用google-DNS来查blog.satikey.com的A记录】

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> @8.8.8.8 blog.satikey.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22798
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;blog.satikey.com.		IN	A

;; ANSWER SECTION:
blog.satikey.com.	599	IN	A	120.25.121.0

;; Query time: 186 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 五 3月 04 15:06:10 CST 2016
;; MSG SIZE  rcvd: 61

从这个例子,大家学习到了dig的基本的命令格式是:

dig @dnsserver name querytype

如果你设置的dnsserver是一个域名,那么dig会首先通过默认的上连DNS服务器去查询对应的IP地址,然后再以设置的dnsserver为上连DNS服务器。
如果你没有设置@dnsserver,那么dig就会依次使用/etc/resolv.conf里的地址作为上连DNS服务器。
而对于querytype,如果你看过我上一篇有关nslookup命令的讲解,那么你应该对querytype有所了解,你可以设置A/AAAA/PTR/MX/ANY等值,默认是查询A记录。

【一些常用的选项】

1 -c选项,可以设置协议类型(class),包括IN(默认)、CH和HS。

2 -f选项,dig支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求。来个实际例子吧:

$ cat querylist //文件内容,共有两个域名需要查询
www.baidu.com
www.sohu.com
$ dig -f querylist -c IN -t A//设置-f参数开始批量查询
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> www.sohu.com
;; Got answer:
;; ->>HEADER<

 

3 -4和-6两个选项,用于设置仅适用哪一种作为查询包传输协议,分别对应着IPv4和IPv6。

4 -t选项,用来设置查询类型,默认情况下是A,也可以设置MX等类型,来一个例子:

[root@ali ~]# dig satikey.com -t MX

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> satikey.com -t MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44867
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;satikey.com.			IN	MX

;; ANSWER SECTION:
satikey.com.		600	IN	MX	10 mxdomain.qq.com.

;; Query time: 525 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: 五 3月 04 15:09:38 CST 2016
;; MSG SIZE  rcvd: 57

 

5 -q选项,其实它本身是一个多余的选项,但是它在复杂的dig命令中又是那么的有用。-q选项可以显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性,来个例子:

[root@ali ~]# dig -q blog.satikey.com 

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> -q blog.satikey.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32619
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;blog.satikey.com.		IN	A

;; ANSWER SECTION:
blog.satikey.com.	462	IN	A	120.25.121.0

;; Query time: 1 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: 五 3月 04 15:10:09 CST 2016
;; MSG SIZE  rcvd: 50

 

6 -x选项,是逆向查询选项。可以查询IP地址到域名的映射关系。举一个例子:

$ dig -x 193.0.14.129
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> -x 193.0.14.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

 

【dig特有的查询选项(query option)】

和刚才的选项不同,dig还有一批所谓的“查询选项”,这批选项的使用与否,会影响到dig的查询方式或输出的结果信息,因此对于这批选项,dig要求显式的在其前面统一的加上一个“+”(加号),这样dig识别起来会更方便,同时命令的可读性也会更强。
dig总共有42个查询选项,涉及到DNS信息的方方面面,如此多的查询选项,本文不会一一赘述,只会挑出最最常用的几个重点讲解。

【TCP代替UDP】

众所周知,DNS查询过程中的交互是采用UDP的。如果你希望采用TCP方式,需要这样:

$ dig +tcp www.baidu.com
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> +tcp www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

 

【默认追加域】

大家直接看例子,应该就能理解“默认域”的概念了,也就能理解+domain=somedomain的作用了:

[root@ali ~]# dig +domain=baidu.com image

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> +domain=baidu.com image
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12599
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;image.baidu.com. IN A

;; ANSWER SECTION:
image.baidu.com. 157 IN CNAME image.n.shifen.com.
image.n.shifen.com. 157 IN A 115.239.210.36

;; Query time: 1 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: 五 3月 04 15:11:43 CST 2016
;; MSG SIZE rcvd: 78

 

【跟踪dig全过程】

dig非常著名的一个查询选项就是+trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。

[root@ali ~]# dig +trace blog.satikey.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> +trace blog.satikey.com
;; global options: +cmd
.			180099	IN	NS	c.root-servers.net.
.			180099	IN	NS	a.root-servers.net.
.			180099	IN	NS	d.root-servers.net.
.			180099	IN	NS	i.root-servers.net.
.			180099	IN	NS	h.root-servers.net.
.			180099	IN	NS	e.root-servers.net.
.			180099	IN	NS	k.root-servers.net.
.			180099	IN	NS	m.root-servers.net.
.			180099	IN	NS	f.root-servers.net.
.			180099	IN	NS	g.root-servers.net.
.			180099	IN	NS	l.root-servers.net.
.			180099	IN	NS	b.root-servers.net.
.			180099	IN	NS	j.root-servers.net.
;; Received 228 bytes from 223.5.5.5#53(223.5.5.5) in 2 ms

com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			86400	IN	DS	30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.			86400	IN	RRSIG	DS 8 1 86400 20160314050000 20160304040000 54549 . Gp4vBclIcc6vc6aMTyAEWit6TXpb7mbA34Zh765d7mYlDtsBtqLC2T+l vO/9313Nv9tmjFeohIm3sljb1aentHbSPKHbpIel9xsEmkf+U/9D1SLk 6Aa4IolDvZ+xIk3hzNNMXZj0GQ9x8THfd2nTP0YkQzsEHQIXO2G9Ux6z Hw4=
;; Received 740 bytes from 192.203.230.10#53(e.root-servers.net) in 280 ms

satikey.com.		172800	IN	NS	lv3ns1.ffdns.net.
satikey.com.		172800	IN	NS	lv3ns2.ffdns.net.
satikey.com.		172800	IN	NS	lv3ns3.ffdns.net.
satikey.com.		172800	IN	NS	lv3ns4.ffdns.net.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20160311055750 20160304044750 28259 com. kp7ioeNTTWeNI7v+JnBOExIdNXI0e9fb183NFhbOE8DepY8Fkfcv5AiS VmyjbBIHZ2lkfp9dKsJwSWEF4hd66JxWBbKYJIJZRWSo4eflpt0DzTZw QJwYyccqZRAguLnm4cYh8gqdvqtDVzYqlY3nu42n/4tG8MoY5Ey2ge6j ppw=
08IRSMDDQKH0F1RB046F1TT3167LUB2Q.com. 86400 IN NSEC3 1 1 0 - 08J0II0U08EAABVNKC39Q7ULKQ08LIBS NS DS RRSIG
08IRSMDDQKH0F1RB046F1TT3167LUB2Q.com. 86400 IN RRSIG NSEC3 8 2 86400 20160308055509 20160301044509 28259 com. myjboCnLuThah+ub7qmQdF+bq93lYQS5B665iMu9Vm+8Wxe+TDvXJ1/u zik/sXW+jmQ+bKZ3WeS1LSDr3Wz4HicvUeNcg7x7bth+VIN5IkPyFunI xmgFof7hBSa8gHCnEYXKYK2O5PxDXxReLj5CtSxA/S+XrplcCeGzxGVP wSw=
;; Received 687 bytes from 192.31.80.30#53(d.gtld-servers.net) in 378 ms

blog.satikey.com.	600	IN	A	120.25.121.0
satikey.com.		3600	IN	NS	lv3ns2.ffdns.net.
satikey.com.		3600	IN	NS	lv3ns1.ffdns.net.
satikey.com.		3600	IN	NS	lv3ns4.ffdns.net.
satikey.com.		3600	IN	NS	lv3ns3.ffdns.net.
;; Received 154 bytes from 42.236.6.151#53(lv3ns3.ffdns.net) in 52 ms

 

【精简dig输出】

1 使用+nocmd的话,可以节省输出dig版本信息。

2 使用+short的话,仅会输出最精简的CNAME信息和A记录,其他都不会输出。就像这样:

[root@ali ~]# dig +short www.baidu.com
www.a.shifen.com.
220.181.112.244
220.181.111.188

 

3 使用+nocomment的话,可以节省输出dig的详情注释信息。

4 使用+nostat的话,最后的统计信息也不会输出。当+nocmd、+nocomment和+nostat都是用上,是这样:

[root@ali ~]# dig +nocmd +nocomment +nostat www.baidu.com
;www.baidu.com.			IN	A
www.baidu.com.		30	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	30	IN	A	220.181.112.244
www.a.shifen.com.	30	IN	A	220.181.111.188

 

【我们还需要学习什么】

坚持看我的博客的同学,已经掌握了nslookup和dig两个DNS工具,我想,下一步你可以
自己搭建一套内部的DNS服务器了,自己设置master/slave服务器,自己添加Zone,
自己添加正解、反解,自己设置缓存超时等等,相信通过这一番折腾,
你对DNS会有不一样的理解和认识。

 

via: http://roclinux.cn/

CentOS 7 更换内核的一些记录

查看内核

[root@ip-10-10-17-4 tmp]# uname -r
3.10.0-123.el7.x86_64

禁止版本升级,编辑/etc/yum.conf文件,在最后添加:

exclude=kernel* centos-release

或者

exclude=kernel*,centos-release*

注意:一种是用空格分开,一种是用逗号分开,如果是redhat,则把centos-release*改为redhat-release*

1、导入key

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

 

如果你修改了repo的gpgcheck=0也可以不导入key

2、安装elrepo的yum源

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

 

3、安装内核

在yum的ELRepo源中,有mainline(3.18.3)这个内核版本

yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml -y

 

选择了使用新安装的repo来安装3.18的内核,如果使用其他的repo,看不到3.18版本内核

更新后查看内核版本

[root@ip-10-10-17-4 tmp]# uname -r
3.10.0-123.el7.x86_64

 

重要:目前内核还是默认的版本,如果在这一步完成后你就直接reboot了,重启后使用的内核版本还是默认的3.10,不会使用新的3.18,想修改启动的顺序,需要进行下一步

查看默认启动顺序

awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (3.18.3-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux, with Linux 3.10.0-123.el7.x86_64
CentOS Linux, with Linux 0-rescue-893b160e363b4ec7834719a7f06e67cf

 

默认启动的顺序是从0开始,但我们新内核是从头插入(目前位置在0,而3.10的是在1),所以需要选择0,如果想生效最新的内核,需要

grub2-set-default 0

 

删除内核

uname -r
#获得服务器当前运行的内核版本
 
rpm -qa | grep kernel
#获得当前系统安装的所有内核(也有其他的)
#################3
#第一种
yum remove kernel
#这种方法是删除系统中除了正在使用的内核外的其他所有内核
#过程中会出现[Y/N]选项,Y删除
 
#第二种
yum remove 具体内核名
#这种方法是将内核一个一个删除

 

锐速TCP加速的安装教程和最优化设置教程

首先
连接SSH
1.下载安装包,并解压缩

wget http://my.serverspeeder.com/d/ls/serverSpeederInstaller.tar.gz
tar xzvf serverSpeederInstaller.tar.gz

2.执行安装程序 (注:该程序需要ROOT权限)

bash serverSpeederInstaller.sh

3.输入账号密码(linux下输入密码的时候看不到东西的,也没有***这种出现的,不要认为是打不上密码)
4.照提示回车回车回车。有y/n的就输入y,然后回车。
5.最后提示的是否启动软件,和加入开机启动。
6.输入lsmod查看是否正在运行。列表上有appex0等就代表正在运行中
7.如果成功运行后,服务器如出现下载慢问题,请用vi命令修改文件,误用SFTP进行修改(下行没问题请无视这条)。
vi /serverspeeder/etc/config
把rsc=”0″改成rsc=”1″,切换新网卡驱动
推荐修改的内容为:
advinacc=”1″ (高级入向加速开关;设为 1 表示开启,设为 0 表示关闭;开启此功能可以得到更
好的流入方向流量加速效果)
maxmode=”1″ (最大传输模式;设为 1 表示开启;设为 0 表示关闭;开启后会进一步提高加速效
果,但是可能会降低有效数据率)”如果测试无效果请不要开启此功能”
其它设置,如果不能直接操作到总服务器的话,不推荐修改,保留默认即可。
按下esc退出编辑
输入:wq保存退出
最后输入/serverspeeder/bin/serverSpeeder.sh restart,重启软件即可。
注:如果提示内存不足无法启动的话,请释放点内存后在执行启动。
或者设置engineNum=”1″(只启用1个加速引擎“单核心才能更稳定”,默认CPU多少线程就启用多少个)
卸载方法:./serverSpeederInstaller.sh uninstall
以上注意区分大小写,否则提示找不到文件
停止命令
/serverspeeder/bin/serverSpeeder.sh stop
启动命令
/serverspeeder/bin/serverSpeeder.sh start
方便对比测试效果

一、 LotServer 简介
LotServer 是一款内嵌 Zeta-TCP 加速引擎的加速软件,可以安装运行在所有主
流 Linux 和 Windows 操作系统服务器上,加速服务器上传服务的质量。LotServer
尤其适合具有较分散互联网用户访问的服务,能够显著提高距离服务器远,跨运营
商访问服务器,和通过无线网络访问服务器的用户的体验,甚至将服务从原先的不
可用变为可用。LotServer 内嵌的 Zeta-TCP 还可以增强连接的稳定性,显著降低访
问失败率。
LotServer 通过加速用户访问连接,提高连接稳定性,全面提高应用服务质量,
提升最终用户体验。
二、 LotServer 加速原理
LotServer 安装到服务器上,对于从服务器到访问服务器的用户的流量,会起到
最好的加速效果;而对于从用户到服务器的流量,加速效果会不稳定或者没有加速
效果(但不会比没安装 LotServer 之前慢)。
LotServer 本质是一个实现了 Zeta-TCP TCP 优化技术的软件,相对于传统的
TCP,Zeta-TCP 主要对以下三个方面进行改进:
第一, Zeta-TCP 引入了更精确的丢包判断及预测算法。传统 TCP 经常错误判
断丢包。将未丢的数据包判断为丢失将导致错误的重传,从而造成带宽的浪费。反
之,如果不能及时判断确实已丢失的数据包,将导致不必要的等待,从而导致带宽
空置。两种误判都会降低连接的吞吐率和带宽的利用率。Zeta-TCP 加速引擎能够精
确及时地判断丢包,从而保证了最佳的带宽利用率。
第二, Zeta-TCP 随时精确侦测连接路径带宽,并相应调整发送数据量。TCP 协
议通过滑动窗口机制对带宽进行自适应。传统 TCP 的滑动窗口实现经常误判路径带
宽容量。高估带宽容量将导致过量传输从而引发拥塞并导致大量丢包。低估带宽容
量则导致闲置带宽容量。两个极端的出现都将导致带宽利用率的下降。传统 TCP 往
往在两个极端之间震荡,很难有效利用带宽。Zeta-TCP 在主动精确侦测路径带宽的
基础上,随时调整发送数据量,从而在防止引入拥塞的同时最大限度地利用路径带- 2 –
宽。
第三, Zeta-TCP 监控学习连接对端的传输行为,并根据其发送模式智能反馈引
导对端正确判断丢包及准确估算路径带宽,从而大幅提升下载方向带宽利用率。对
比于传统 TCP 被动确认及接受数据,Zeta-TCP 反向智能遥控对端的传输行为,实
现了业界独一无二的单边下载加速。
除了以上三点主要突破性技术手段,Zeta-TCP 在很多其它方面也对传统 TCP 进
行了细致的改进和完善。经过多年在各种真实网络环境中的不断调整改进,单边 TCP
加速具备了广泛的适用性和有效性。
三、 软件命名格式
LotServer 模块文件名:acce-模块版本号-[Linux 系统版本_内核版本]
LotServer 授权文件名:apx-过期时间.lic
四、 安装步骤
通过 LotServer 发布系统,我们为您提供两种安装方式,自动安装和手动安装;
两种安装均需由具有 root 权限的用户进行操作;
4.1 自动安装
自动安装时,安装程序需要通过互联网访问 LotServer 发布系统以便对您的安装
帐号进行验证,并在验证通过后,在服务器上下载与您的安装账号绑定的 LotServer
已授权程序;所以采用自动安装方式进行安装时,需要您的服务器能够访问互联网。
自动安装可采用交互式安装和非交互式安装两种方式进行操作,具体步骤如下;
交互式安装:
(1) 下载自动安装文件,
(2) 复制安装文件到您的服务器;或者在服务器上运行
wget http://download.appexnetworks.co … verInstaller.tar.gz 下
载自动安装文件;- 3 –
(3) 解压缩:tar xzvf lotServerInstaller.tar.gz;
(4) 为解压出的 lotServerInstaller.sh 赋予可执行权限:chmod +x
lotServerInstaller.sh;
(5) 以 root 用户权限运行解压后得到的安装脚本:./lotServerInstaller.sh;
(6) 根据屏幕提示输入 LotServer 安装授权帐号和密码;
(7) 安装授权验证通过后,安装程序会自动连接 LotServer 下载服务器并下载已
授权的 LotServer 程序;该过程视您的网络状况和服务器繁忙程度的不同,
将持续几秒或几十秒的时间;
(8) 根据屏幕提示,输入【加速接口】、【上行带宽】、【下行带宽】等(注:此设
置在安装 lotServer 后也可更改);
(9) 根据屏幕提示选择是否立即启动 LotServer;
非交互式安装:
(1) 下载自动安装文件;
(2) 复制安装文件到您的服务器;
(3) 解压缩:tar xzvf lotServerInstaller.tar.gz;
(4) 为解压出的 lotServerInstaller.sh 赋予可执行权限: chmod +x
lotServerInstaller.sh;
(5) 以 root 用户权限运行解压后得到的安装脚本:
./lotServerInstaller.sh -e email -p password [-in inbound_bandwidth] [-out outbound_bandwidth]
[-i interface] [-r]
各参数说明如下:
-e:您的安装帐号,一般为 email 地址格式;
-p:安装帐号的密码;
-in:入向带宽;可省略,默认为 1000 000kbps;
-out:出向带宽;可省略,默认为 1000 000kbps;
-i:加速接口;可省略,默认为 eth0;
-r:安装完成后是否立即运行 LotServer;可省略,默认为不立即运行 LotServer;
安装完成后,安装程序会给出相应的安装结果提示,一般有如下三种情况:
(1) 安装成功:安装成功后,安装程序会在您的服务器文件系统的根目录下面创
建一个/appex 目录,下面包含 bin、etc 和 log 三个子目录;其中 bin 目录中
存放有 LotServer 模块文件及执行脚本,etc 目录中存放有包含 LotServer 授- 4 –
权文件和 LotServer 配置文件,log 目录中未存放任何文件;
(2) LotServer 版本未找到:自动安装程序未找到与您的服务器相匹配的 LotServer
版本,程序会在给出相应的提示后退出;
(3) 授权次数达到上限:您所使用的安装账户的授权次数已到,安装程序会在给
出相应的提示后退出;
4.2 采用手动安装方式进行安装
由于自动安装需要服务器直接连接互联网,如果需要安装 LotServer 的服务器无
法连接互联网,则您可以选择手动安装的方式进行安装;具体安装步骤请参见:
http://download.appexnetworks.com.cn/w.do?m=lslm
五、 使用方法
5.1 目录及文件说明
名称 类型 说明
/appex: 目录 安装成功后,安装程序会自动在服务器文件系
统的根目录下面创建该目录;该目录用于存放
与 LotServer 相关的各文件;
/appex/bin/ 目录 用于存放 LotServer 模块文件及执行脚本;
/appex/bin/acce-xxx 文件 LotServer 模块文件;
/appex/bin/lotServer.sh 文件 用于启动 LotServer 的脚本文件;
/appex/etc/ 目录 用于存放 LotServer 授权文件及其参数配置文
件;
/appex/etc/apx-xxx.lic 文件 LotServer 授权文件;
/appex/etc/config 文件 LotServer 配置文件;
/appex/log/ 目录 用于存放 LotServer 运行过程中可能需要抓取
的一些用于问题调试的 log 文件;- 5 –
5.2 常用配置参数说明
通过修改/appex/etc/config 文件,可以为 LotServer 设定不同的配置参数;常用参
数的说明如下:
(1) accif=”eth
加速接口;eth
一般为服务器上对外提供服务的网络接口,例如 eth0, eth1„,一
般通过 ifconfig 命令可以看到;可以同时设定多个接口作为加速接口(接口之间用空
格分开),如 accif=”eth0 eth1″;默认为”eth0″;
(2)acc=”1″
TCP 加速开关;设为 1 表示开启 LotServer 的 TCP 加速功能,设为 0 表示关闭
LotServer 的 TCP 加速功能;默认为 1;
(3)advacc=”1″
高级加速开关;设为 1 表示开启,设为 0 表示关闭;开启此功能可以得到更好的
加速效果,但有可能会造成有效数据率下降;默认为 1;
(4)advinacc=”0″
高级入向加速开关;设为 1 表示开启,设为 0 表示关闭;开启此功能可以得到更
好的流入方向流量加速效果;
(5)wankbps=”1000000″
加速接口上行带宽;指的是从服务器流出到 Internet 的最大带宽,单位为 Kbps,
例如服务器所连接的 Internet 带宽为 1G,则设置为 1000000;默认为 1000000;
(6)waninkbps=”1000000″
加速接口下行带宽;指的是从 Internet 流入服务器的最大带宽,单位为 Kbps,例
如服务器所连接的 Internet 带宽为 1G,则设置为 1000000;默认为 1000000;
wankbps 和 waninkbps 的设置一般与实际带宽相同为最理想;如果无法确定实际
带宽,一般设置为网卡的最大吞吐能力即可;例如网卡为千兆全双工网卡,则 wankbps
和 waninkbps 都设置为 1000000;
当设置过小时,例如实际带宽有 100Mbps,但 wankbps 和 waninkbps 设置为
10Mbps,则数据流量会被限制在 10Mbps 以内,此时会降低服务器的吞吐;
(7)csvmode=”0″ highcsv=”0″
csvmode 拥塞控制模式开关;设为 1 表示开启,设为 0 表示关闭;开启 tcp 加速
后,在某些丢包较大的网络中可能会造成有效数据率下降的问题;此时开启拥塞控- 6 –
制模式,可以有效避免该问题;但开启此选项时,可能加速效果也会下降;默认为 0;
csvmode=”1″ highcsv=”0″时,为普通拥塞控制模式,对拥塞具有一定控制的同时
对加速效果的影响较小;
csvmode=”1″ highcsv=”1″时,为高级拥塞控制模式,可以更好的控制拥塞但是相
比于普通拥塞控制模式对加速效果的影响较大。
(8)subnetAcc=”0″
局域网加速开关;设为 1 表示开启;设为 0 表示关闭;不开启时对于同一局域网
内的连接不会加速;开启后对同一网段的 TCP 连接也进行加速;
(9)maxmode=”0″
最大传输模式;设为 1 表示开启;设为 0 表示关闭;开启后会进一步提高加速效
果,但是可能会降低有效数据率;
(10)maxTxEffectiveMS=”0”
最大传输模式生效时间;用于控制最大传输模式对每一个连接的生效时间;设为
0 表示从连接建立到连接结束,都采用最大传输模式传输;单位为 ms,1000 即 1s;
(11)pcapEnable=“0”
抓包开关;设为 1 表示开启,设为 0 表示关闭;开启此功能后会抓取经过加速引
擎处理的数据包,在/appex/log 目录下生成抓包文件;
(12)bypassOverFlows=”1″
流量 bypass 开关;设为 1 表示开启,设为 0 表示关闭;开启此功能后当服务器
的连接数超过引擎设定后会对超过的连接的流量 bypass,否则会无法新建连接;
(13)initialCwndWan=”44″
初始 TCP 发送窗口能够发送的数据包的数量;该值设置的高会获得更好的加速
效果,但是可能会造成网络的拥塞;
(14)l2wQLimit=”256 2048″
从 LAN 到 WAN 加速引擎在缓冲池充满和空闲时分别能够缓存的数据包队列的
长度的上限;该值设置的高会获得更好的加速效果,但是会消耗更多的内存;
(15)w2lQLimit=”256 2048″
从 WAN 到 LAN 加速引擎在缓冲池充满和空闲时分别能够缓存的数据包队列的
长度的上限;该值设置的高会获得更好的加速效果,但是会消耗更多的内存;
(16)shrinkPacket=”0″
slab 缓存缩减开关;设为 1 表示开启,设为 0 表示关闭;当服务器内存消耗很高
时可以将该值设定为 1,这样会降低内存的消耗;- 7 –
(17)retranWaitListMS=”32
重传等待时间;当服务器没有收到 ack 或者丢包产生之后客户端重复 ack 时间达
到 32ms,服务器重传数据;默认为 32ms;
(18)halfCwndMinSRtt=”500″
halfCwndLossRateShift=”3″
以上两个值用于判断网络拥塞,分别为延时和丢包率,丢包率默认值为 3,即
1/2^3,当拥塞产生时,退出第三代 Learning-based TCP 算法,采用类似传统 TCP 的
算法。
(19)#byte cache
byteCache=”0″
httpComp=”1″
byteCacheMemory=”250″ #MB
byteCacheDisk=”0″ #MB
diskDev=”/dev/sda2″
以上为双边缓存的设置,当前只有部分版本支持该功能。分别是缓存开关,数据
压缩开关,内存大小,硬盘大小,指定硬盘位置;
(20)shaperEnable=”1″
流量整形开关,配合上行和下行带宽设置开启;设为 1 表示开启,设为 0 表示关
闭;开启此功能,会采用 wankbps 以及 waninkbps 设置的带宽大小运行;关闭此功
能,会根据实时传输自动测算带宽大小;
(21)tcpOnly=”1″
设为 1 表示开启,设为 0 表示关闭;开启此功能,即只处理 TCP 流量;关闭此功能,
也处理除 TCP 以外的流量(不会对非 TCP 流量加速),一般用于配置策略对非 TCP 数据丢弃时;
(22)SmBurstMS=”15″
引擎允许的最大突发时间,设为 0,则关闭;该值越大,数据包发送量越大;当
前推荐默认为 15;
(23)rsc=”0″
网卡接收端合并开关;设为 1 表示开启,设为 0 表示关闭;在有些较新的网卡驱
动中,带有 RSC 算法的,需要打开该功能;
(24)gso=”0″
GSO 开关;设为 1 表示开启,设为 0 表示关闭;当网卡需要开启 gso 功能时,
开启此功能,LotServer变为支持gso的模式;关闭此功能,如果网卡开启gso,LotServer- 8 –
会关闭网卡的 gso 功能;
(25)lanSegment=””
当 LotServer 不是 TCP 连接的最终节点并且采用单臂模式部署时,如果 LotServer
和服务器之间网络环境很好,不需要加速,将此参数的值设为 Lan 一侧的子网网段
(参数的值为子网网段的十六进制表示加子网掩码,例:ip 为 172.33.0.0/16,
lanSegment=”AC210000/16″),则 LotServer 和服务器之间不进行加速,可以节省
LotServer 使用的资源并获得更好的加速效果。如果不设置此参数,则 LotServer 会对
所有经过的 TCP 连接进行加速。(注:如果参数转换为十六进制后,第一位数字为 0
时,需要省略,不然无法正常写入配置。例如:参数十六进制值为:0C210000/16,
那么 lanSegment=”C210000/16″。)
(26)configTimeout=”30″
设置开启 LotServer 时,写入配置所需要的时间。当引擎的数目很多时需要写入
配置的时间较长,默认为 30s。
(27)engineNum=”0″
LotServer 启动的加速引擎的的个数;在多处理器(核)的系统环境下,启用多个加
速引擎可以使网络流量的负载在多个处理器(核)之间做均衡分配,从而帮助优化系统
CPU 资源的利用;启用多个加速引擎时,引擎序号从 0 开始,分别为 engine0, engine1,
engine2,等等;每个引擎的负载对应交给相同序号的处理器来处理,即,engine0 使
用 cpu0, engine1 使用 cpu1 等;engineNum 默认为 0,表示启用的加速引擎个数与系
统的处理器个数相同,64bit 架构下,当实际的 engineNum 参数大于 4 时,检查内
存:
当总内存减去 engine 占用内存剩余数小于 2G 时,提示用户一个 warning:
LotServer Warning: $CPUNUM engines will be launched according to the config file.
Your system’s total RAM is $memTotal(KB), which might be insufficient to run all the
engines without performance penalty under extreme network conditions. ;
(28)shortRttMS=”10″
白名单开关;打开后 LotServer 将不对 RTT 小于 shortRttMS 的连接加速,节约系
统资源,提高性能;设置为 0 时表示关闭此功能,LotServer 会加速所有的连接;设
置为其他值时,例如 10,则表示当第一次建立连接时,Lotserver 会测量所有的新建
连接的 RTT,但是不对其进行加速;如果 RTT 大于 10ms,LotServer 会从第二次建
立连接开始对其加速,如果 RTT 小于 10ms,LotServer 则一直不会对其加速。默认
值 10ms。- 9 –
重启 LotServer 后,原来记录的每个连接的 RTT 会被清除,重新开始记录。
LotServer 使用五元组判断是否为同一连接,五元组包括:源 ip,目的 ip,源端口,
目的端口和协议。
(29)apxexe=” /appex/bin/acce-
LotServer 模块文件的路径;
(30)apxlic=”/appex/etc/apx-
.lic”
LotServer 授权文件的路径;
5.3 运行 LotServer
使用/appex/bin/目录下的 lotServer.sh 脚本进行 LotServer 的启动,停止,以及重
新加载配置等操作;可通过./lotServer.sh –help 查看脚本的帮助信息;各参数说明如
下:
start:启动 LotServer,加载加速模块;使用/appex/etc/config 文件中的配置作为
模块加载时的初始化参数;
stop:停止 LotServer,卸载加速模块;停止 LotServer 前请确认没有其它进程在
访问/proc/net/appex/目录,例如确认控制台当前目录是否是/proc/net/appex/;
reload:在不停止 LotServer 运行的情况下实时修改 LotServer 参数配置,修改
/appex/etc/config 文件的配置后运行此命令,此时加速模块不退出,参数被实时
修改;
restart:重启 LotServer;
status:查看当前 LotServer 的实时运行状态;License 的信息;连接的信息和
LotServer 当前的配置;
stats:实时显示每个加速引擎的连接数、流量,以及所有引擎的总的连接数和流
量;其中连接数统计包括网络连接数(sessions),tcp 连接数(tcp sessions),已加速
的 tcp 连接数(accelerated sessions)以及活动的 tcp 连接数(active tcp sessions);被
ShortRtt 功能忽略的包的个数(short rtt bypassed packets);流量统计包括流入(in)
流量统计和流出(out)流量统计,单位均为 kbit/s;一般情况下,所有引擎的总连
接数及流量即为服务器的互联网连接数及流量;
renewLic:当有新的 License 文件可用时,联网更新 License 文件并重启 LotServer;
update:当有新的 LotServer 版本可用时,联网更新 LotServer 并重启 LotServer;- 10 –
注:
运行 LotServer 前请务必确认加速接口的 tso (tcp segmentation offload)、gso (generic
segmentation offload)、gro(generic receive offload)、lro(large receive offload)和 sg(scatter gather)
功能是否处于关闭状态!!!如果在 tso、gso、gro、lro 或 sg 其中之一处于开启状态而 LotServer
中未开启该功能,此时运行 LotServer,会关闭这些功能。如果在 LotServer 运行过程中有其
他软件等开启这些功能,会导致加速模块无法取到数据包,进而导致网络中断。您可通过
ethtool –k eth* 来查看加速接口的 tso、gso、gro、lro 和 sg 的当前状态。
如果您的加速接口的 tso、gso、gro、lro 和 sg 功能是关闭的,对于 bonding 性质的接口,
需组成该接口的所有 eth 口的 tso、gso、gro、lro 和 sg 功能是关闭的,那么您无需更改 LotServer
的配置。
如果您的加速接口的 tso、gso、gro、lro 和 sg 功能其中之一是打开的,可以通过打开
LotServer 的 gso 功能(gso=”1″),将 LotServer 转换为支持 tso、gso 和 sg 的形式,打开 LotServer
的 rsc 功能(rsc=”1″),则将 LotServer 转换为支持 gro 和 lro 的形式,修改 LotServer 中的 gso
和 rsc 功能后,需要 lotServer.sh restart 让配置生效。
5.4 确认 LotServer 已经运行
通过 lotServer.sh status 命令来查看 LotServer 当前的运行状态;
通过 lsmod 查看是否有 appex0 的模块来确认 LotServer 是否在正常运行;
通过查看/proc/net/appex/stats 文件来确认 LotServer 是否在正常运行。

如果启动报错

Actual changes:
scatter-gather: off
 tx-scatter-gather: off
 tx-scatter-gather-fraglist: off
udp-fragmentation-offload: off [requested on]

那么打开gso=1即可

 

1,首先使用ifconfig确认网卡接口(如eth0),然后执行以下指令:

ethtool -k eth0 

这里的eth0请自行替换为自己的网卡.
然后记下以下加速接口的状态:
tso (tcp segmentation offload)
gso (generic segmentation offload)
gro(generic receive offload)
lro(large receive offload)
sg(scatter gather)

然后编辑锐速的配置文件:

vim /serverspeeder/etc/config

以下几点是需要特别注意配置的:
◆如果上面的tso、gso、gro、lro 和 sg 其中之一是可以打开的,则设置gso=”1″
◆如果gro和lro是可以开启的,则设置rsc=”1″.(有些网卡虽然未开启,但也支持RSC算法的,也可尝试设置为1)
◆在丢包率较高的环境下,设置maxmode=”1″ 能非常明显的获得速度的提升.此功能和net-speeder暴力发包类似,为了整体网络环境考虑,虽然锐速有自己的拥塞控制,但还是建议视情况决定是否需要开启此开关.
◆流入方向流量加速,设置advinacc=”1″.
◆还有个可以得到更好的加速效果的开关:设置advacc=”1″,但有可能会造成有效数据率下降,是否开启自行考虑.
◆如果需要锐速对PPTP,L2TP和IkeV2进行加速,则开启accppp=”1″.
◆对于OpenVPN,需要先用ifconfig指令确定OpenVPN对应接口(大多是tun0),然后在accif后面追加接口,如accif=”eth0 tun0″.

配置完成后,使用service serverSpeeder restart重启锐速服务,shadowsocks无需特别配置,只需遵从上面的优化配置,在锐速重启后稍等片刻即可提速.

accif="eth*"
#加速接口,eth*一般为服务器上对外提供服务的网络接口,例如 eth0 eth1,一般通过 ifconfig 命令可以看到,可以同时设定多个接口作为加速接口(接口之间用空格分开),如 accif="eth0 eth1",默认为"eth0"。
acc="1"
#TCP 加速开关,设为 1 表示开启 LotServer 的 TCP 加速功能,设为 0 表示关闭LotServer 的 TCP 加速功能,默认为 1。
advacc="1"
#高级加速开关,设为 1 表示开启,设为 0 表示关闭,开启此功能可以得到更好的加速效果,但有可能会造成有效数据率下降,默认为 1
advinacc="0"
#高级入向加速开关,设为 1 表示开启,设为 0 表示关闭,开启此功能可以得到更好的流入方向流量加速效果。
wankbps="1000000"
#加速接口上行带宽,指的是从服务器流出到 Internet 的最大带宽,单位为 Kbps,例如服务器所连接的 Internet 带宽为 1G,则设置为 1000000,默认为 1000000。
waninkbps="1000000"
#加速接口下行带宽,指的是从 Internet 流入服务器的最大带宽,单位为 Kbps,例如服务器所连接的 Internet 带宽为 1G,则设置为 1000000,默认为 1000000,wankbps 和 waninkbps 的设置一般与实际带宽相同最理想,如果无法确定实际带宽,一般设置为网卡的最大吞吐能力即可,例如网卡为千兆全双工网卡,则 wankbps和 waninkbps 都设置为 1000000,当设置过小时,例如实际带宽有 100Mbps,但 wankbps 和 waninkbps 设置为10Mbps,则数据流量会被限制在 10Mbps 以内,此时会降低服务器的吞吐。
csvmode="0" highcsv="0"
#csvmode 拥塞控制模式开关,设为 1 表示开启,设为 0 表示关闭,开启 tcp 加速后,在某些丢包较大的网络中可能会造成有效数据率下降的问题,此时开启拥塞控制模式,可以有效避免该问题,但开启此选项时,可能加速效果也会下降,默认为 0,csvmode="1" highcsv="0"时,为普通拥塞控制模式,对拥塞具有一定控制的同时对加速效果的影响较小,csvmode="1" highcsv="1"时,为高级拥塞控制模式,可以更好的控制拥塞但是相比于普通拥塞控制模式对加速效果的影响较大。
subnetAcc="0"
#局域网加速开关,设为 1 表示开启,设为 0 表示关闭,不开启时对于同一局域网内的连接不会加速,开启后对同一网段的 TCP 连接也进行加速。
maxmode="0"
#最大传输模式,设为 1 表示开启,设为 0 表示关闭,开启后会进一步提高加速效果,但是可能会降低有效数据率。
maxTxEffectiveMS="0"
#最大传输模式生效时间,用于控制最大传输模式对每一个连接的生效时间,设为0 表示从连接建立到连接结束,都采用最大传输模式传输,单位为 ms,1000 即 1s。
pcapEnable="0"
#抓包开关,设为 1 表示开启,设为 0 表示关闭,开启此功能后会抓取经过加速引擎处理的数据包,在/appex/log 目录下生成抓包文件。
bypassOverFlows="1"
#流量 bypass 开关,设为 1 表示开启,设为 0 表示关闭,开启此功能后当服务器的连接数超过引擎设定后会对超过的连接的流量 bypass,否则会无法新建连接。
initialCwndWan="44"
#初始 TCP 发送窗口能够发送的数据包的数量,该值设置的高会获得更好的加速效果,但是可能会造成网络的拥塞。
l2wQLimit="256 2048"
#从 LAN 到 WAN 加速引擎在缓冲池充满和空闲时分别能够缓存的数据包队列的长度的上限,该值设置的高会获得更好的加速效果,但是会消耗更多的内存。
w2lQLimit="256 2048"
#从 WAN 到 LAN 加速引擎在缓冲池充满和空闲时分别能够缓存的数据包队列的长度的上限,该值设置的高会获得更好的加速效果,但是会消耗更多的内存。
shrinkPacket="0"
#slab 缓存缩减开关,设为 1 表示开启,设为 0 表示关闭,当服务器内存消耗很高时可以将该值设定为 1,这样会降低内存的消耗。
retranWaitListMS="32"
#重传等待时间,当服务器没有收到 ack 或者丢包产生之后客户端重复 ack 时间达到 32ms,服务器重传数据,默认为 32ms。
halfCwndMinSRtt="500"  halfCwndLossRateShift="3"
#以上两个值用于判断网络拥塞,分别为延时和丢包率,丢包率默认值为 3,即1/2^3,当拥塞产生时,退出第三代 Learning-based TCP 算法,采用类似传统 TCP 的算法。

#byte cache
byteCache="0" 
httpComp="1" 
byteCacheMemory="250" #MB 
byteCacheDisk="0" #MB 
diskDev="/dev/sda2"
#以上为双边缓存的设置,当前只有部分版本支持该功能。分别是缓存开关,数据压缩开关,内存大小,硬盘大小,指定硬盘位置。
shaperEnable="1"
#流量整形开关,配合上行和下行带宽设置开启,设为 1 表示开启,设为 0 表示关闭,开启此功能,会采用 wankbps 以及 waninkbps 设置的带宽大小运行,关闭此功能,会根据实时传输自动测算带宽大小。
tcpOnly="1"
#设为 1 表示开启,设为 0 表示关闭,开启此功能,即只处理 TCP 流量,关闭此功能,也处理除 TCP 以外的流量(不会对非 TCP 流量加速),一般用于配置策略对非 TCP 数据丢弃时。
SmBurstMS="15"
#引擎允许的最大突发时间,设为 0,则关闭,该值越大,数据包发送量越大,当前推荐默认为 15。
rsc="0"
#网卡接收端合并开关,设为 1 表示开启,设为 0 表示关闭,在有些较新的网卡驱动中,带有 RSC 算法的,需要打开该功能。
gso="0"
#GSO 开关,设为 1 表示开启,设为 0 表示关闭,当网卡需要开启 gso 功能时,开启此功能,LotServer变为支持gso的模式,关闭此功能,如果网卡开启gso,LotServer会关闭网卡的 gso 功能。
lanSegment=""
#当 LotServer 不是 TCP 连接的最终节点并且采用单臂模式部署时,如果 LotServer和服务器之间网络环境很好,不需要加速,将此参数的值设为 Lan 一侧的子网网段(参数的值为子网网段的十六进制表示加子网掩码,例:ip 为 172.33.0.0/16,lanSegment="AC210000/16"),则 LotServer 和服务器之间不进行加速,可以节省LotServer 使用的资源并获得更好的加速效果。如果不设置此参数,则 LotServer 会对所有经过的 TCP 连接进行加速。(注:如果参数转换为十六进制后,第一位数字为 0时,需要省略,不然无法正常写入配置。例如:参数十六进制值为:0C210000/16,那么 lanSegment="C210000/16"。)
configTimeout="30"
#设置开启 LotServer 时,写入配置所需要的时间。当引擎的数目很多时需要写入配置的时间较长,默认为 30s。
engineNum="0"
#LotServer 启动的加速引擎的的个数,在多处理器(核)的系统环境下,启用多个加速引擎可以使网络流量的负载在多个处理器(核)之间做均衡分配,从而帮助优化系统CPU 资源的利用,启用多个加速引擎时,引擎序号从 0 开始,分别为 engine0, engine1,engine2,等等,每个引擎的负载对应交给相同序号的处理器来处理,即,engine0 使用 cpu0, engine1 使用 cpu1 等,engineNum 默认为 0,表示启用的加速引擎个数与系统的处理器个数相同,64bit 架构下,当实际的 engineNum 参数大于 4 时,检查内存:当总内存减去 engine 占用内存剩余数小于 2G 时,提示用户一个 warning:LotServer Warning: $CPUNUM engines will be launched according to the config file.Your system total RAM is $memTotal(KB), which might be insufficient to run all theengines without performance penalty under extreme network conditions. 
shortRttMS="10"
#白名单开关,打开后 LotServer 将不对 RTT 小于 shortRttMS 的连接加速,节约系统资源,提高性能,设置为 0 时表示关闭此功能,LotServer 会加速所有的连接,设置为其他值时,例如 10,则表示当第一次建立连接时,Lotserver 会测量所有的新建连接的 RTT,但是不对其进行加速,如果 RTT 大于 10ms,LotServer 会从第二次建立连接开始对其加速,如果 RTT 小于 10ms,LotServer 则一直不会对其加速。默认值 10ms。重启 LotServer 后,原来记录的每个连接的 RTT 会被清除,重新开始记录。LotServer 使用五元组判断是否为同一连接,五元组包括:源 ip,目的 ip,源端口,目的端口和协议。
apxexe=" /appex/bin/acce-***"
#LotServer 模块文件的路径。
apxlic="/appex/etc/apx-***.lic"
#LotServer 授权文件的路径。

 

ubuntu:更新内核与清理无用文件

编辑软件源
sudo gedit /etc/apt/sources.list
查看系统存在的内核。
dpkg -l|grep linux
或dpkg –get-selections|grep linux
显示当前的内核
uname -a
升级内核
apt-get dist-upgrade
删除内核
sudo apt-get remove 内核名
带有image的文件是需要删除的,一定要写全版本等字符。其他相关的文件会自动删除。
例如:
sudo apt-get remove –purge linux-image-2.6.24-19-generic
–purge参数表示彻底删除。
另外,我删除2.6.24-19的内核时,忘了自己当前正使用此内核。不过,幸好有惊无险。删除不了当前使用的内核。
更新menu.list
sudo update-grub
先将menu.list备份,然后改名或删除。这样会自动重建文件。然后将原来的menu.list 中需要的东西拷贝到新的menu.list中。
重建时,grub不会将其他系统的引导信息也添加进去。需要的从原来的文件中复制一下就行了。
系统垃圾清理
sudo apt-get autoclean 清理旧版本的软件缓存
sudo apt-get clean 清理所有软件缓存
sudo apt-get autoremove 删除系统不再使用的孤立软件
Ubuntu Linux与Windows系统不同,Ubuntu Linux不会产生无用垃圾文件,但是在升级缓存中,Ubuntu Linux不会自动删除这些文件,今天就来说说这些垃圾文件清理方法。
  1,非常有用的清理命令:
sudo apt-get autoclean
sudo apt-get clean
sudo apt-get autoremove
这三个命令主要清理升级缓存以及无用包的。
  2,清理opera firefox的缓存文件:
ls ~/.opera/cache4
ls ~/.mozilla/firefox/*.default/Cache
  3,清理Linux下孤立的包:
图形界面下我们可以用:gtkorphan
sudo apt-get install gtkorphan -y
终端命令下我们可以用:deborphan
sudo apt-get install deborphan -y
  4,卸载:tracker
这个东西一般我只要安装Ubuntu就会第一删掉tracker 他不仅会产生大量的cache文件而且还会影响开机速度。所以在新得利里面删掉就行。
  5,删除多余的内核:一定不要删错哦,切记!!
打开终端敲命令:dpkg –get-selections|grep linux
有image的就是内核文件
删除老的内核文件:
sudo apt-get remove 内核文件名 (例如:linux-image-2.6.27-2-generic)
内核删除,释放空间了,应该能释放130-140M空间。
最后不要忘了看看当前内核:uname -a
附录:
包管理的临时文件目录:
包在
/var/cache/apt/archives
没有下载完的在
/var/cache/apt/archives/partial
使用Ubuntu一段时间后,就会发觉由于自动升级,系统里安装了很多内核。像我,竟然安装了下面那么多,这个造成了漫长的启动列表。必须删掉一些不用的。
首先就是使用如下命令,列出所有安装的内核,下表中,带有image的就是内核文件。从中选择要卸载的包,用apt-get来卸载
[tc@ibm:~]$ dpkg –get-selections|grep linux
libselinux1 install
linux-386 install
linux-image-2.6.15-23-386 install
linux-image-2.6.15-27-386 install
linux-image-2.6.15-27-686 install
linux-image-2.6.15-28-386 install
linux-image-2.6.15-28-686 deinstall
linux-image-386 install
linux-kernel-headers install
linux-restricted-modules-2.6.15-23-386 install
linux-restricted-modules-2.6.15-27-386 install
linux-restricted-modules-2.6.15-27-686 install
linux-restricted-modules-2.6.15-28-386 install
linux-restricted-modules-2.6.15-28-686 deinstall
linux-restricted-modules-386 install
linux-restricted-modules-common install
linux-sound-base install
util-linux install
具体的卸载方法为
sudo apt-get remove linux-image-2.6.15-23-386
这样就可以实现自动删除内核文件了,还可以释放磁盘空间。
另外还要记录一个命令。
uname -a
使用这个命令可以查看当前系统使用的内核。

Apache access.log error.log日志文件太大优化方法

没有发现Apache生成的日志文件一天比一天大,不是一般大,若你apache安装在C盘,那可惨了,不几天硬盘就满了,太恐怖了,有没有办法优化一下日志,让它不那么大?答案是有的。

一、停止Apache服务,删除Apache下/logs/目录中的error.log和access.log文件。

二、打开Apache的conf/httpd.conf配置文件,找到以下配置信息:

ErrorLog logs/error.log
CustomLog logs/access.log common

请在上述两行配置代码前加“#”号注释掉,按照下面的修改:

错误日志文件error.log限制错误日志文件为 1M:

ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 1M”

或者每天生成一个错误日志文件:

ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400"

日志文件access.log限制访问日志文件为 1M:

CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 1M” common

或者每天生成一个访问日志文件:

CustomLog “|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400” common

CustomLog有很重要的作用,体现在下列几点

1:SEO和网站优化。通过Log查看死链,以及来访的蜘蛛等,从而对网站进行针对性的优化。:2

2:发现潜在安全问题。由于此Log记录HTTP请求头,里面有请求地址,帮助我们发现一些攻击者构造的非法请求,尤其是以数据库注入为主的攻击

注意,Apache访问日志默认请求的内容可能满足不了我们的需求,LogFormat记录如下:

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

修改为 带HTTP请求头部的

LogFormat “%h %l %u %t \”%m %U %q %H\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

然后注释掉http.conf中的#CustomLog “logs/access.log” common,然后去除掉

#CustomLog “logs/access.log” combined这行前面的注释。现在就能记录请求中的查询字符串以及User Agent等信息了
apache日志管理以及大日志清除方法
web服务器日志轮循比较好的方式有三种:
第一种方法是利用Linux系统自身的日志文件轮循机制:logrotate;
第二种方法是利用apache自带的日志轮循程序rotatelogs;
第三种是使用在apache的FAQ中推荐发展已经比较成熟的一个日志轮循工具cronolog。

这里我给大家带来的是用apache自带的日志轮循程序rotatelogs,并用shell脚本定期删除日志文件,只保留近3天的文件,以免日志文件占满
磁盘空间。
修改主配置文件httpd.conf
找到以下内容,并修改成:
ErrorLog /var/log/httpd/error_log
CustomLog “|/usr/local/apache2/bin/rotatelogs  /var/log/httpd/access_log 86400 400M” combined
86400    —日志滚动的时间是一天
400      —日志文件最大400M就滚动
combined —采用复合格式

然后建立清除日志文件的shell脚本,文件名为clean_log
#! /bin/bash
logdir=/var/log/httpd
cd ${logdir}
declare -i filesum=`ls access_log.* | wc -l`
declare -i delnum=$filesum-3
if [ “${delnum}” -ge 1 ];then
rm -rf `ls -tr access_log.* | head -${delnum}`
fi

chmod 755 clean_log
这样就保留了最近3天的日志文件。

建立自动化任务
01 04 * * * /usr/local/crontab/clean_log
ok,搞定,就这么简单。这样你就不用不必为日见增大的日志文件烦恼了!
用到apache自带的rotatelogs小工具
语法如下:

rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]

参数解释:
-l :使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。
logfile:它加上基准名就是日志文件名。如果logfile中包含”%”,则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单

位的”.nnnnnnnnnn”后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime :日志文件滚动的以秒为单位的间隔时间。
offset :相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数

应为”-300″。
filesizeM :指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。

例子:
1、按时间滚动日志文件:
错误日志:ErrorLog “|/data/apache/bin/rotatelogs 日志存放目录/%Y%m%d_error.log 86400 480”
访问日志:CustomLog “|/data/apache/bin/rotatelogs 日志存放目录/%Y%m%d_access.log 86400 480” common

其中:
/data/apache:为apache的安装目录,根据自己实际情况确定;
86400:秒,24小时,表示生成的日志文件按天滚动,也就是每天生成一个日志文件;
480:分,时间偏移。
同理可以按小时滚动日志文件,每隔一个小时,几个小时。。。生成一个日志文件。

扩展:可以写个脚本定时删除日志文件,只保留几天的日志,如果网站访问量比较大,一天会生成几十上百M甚至更大的日志文件,既占硬盘又影响服务器性能。

2、按大小滚动日志文件:
错误日志:ErrorLog “|/data/apache/bin/rotatelogs -l 日志存放目录/%Y%m%d_error.log 5M”
访问日志:CustomLog “|/data/apache/bin/rotatelogs -l 日志存放目录/%Y%m%d_access.log 5M” common

当日志文件达到5M时,滚动该日志文件。

本文出自 “彩霞飞飞” 博客,请务必保留此出处http://caixia.blog.51cto.com/2266345/1674935