通用技术 终端复用软件 tmux 在性能测试中的应用

Yorn · 2016年03月04日 · 最后由 songz 回复于 2016年03月07日 · 2862 次阅读
本帖已被设为精华帖!

tmux

0. 前言

做性能测试时,离不开服务器性能监控,当要同时监控多台机器的性能时,就需要一些多窗口/会话控制的工具了。尝试了一下 tmux ,感觉比 XShellSecureCRT 要更适合这样的场景。个人比较喜欢 puttytmux 刚好补充它的多窗口短板。SecureCRT 的键映射和脚本也是很方便的功能。另外多窗口管理还有一个 Screen ,但 tmux 比它多了一个会话管理功能,可以随时保存和恢复会话。作为一个新手,写一下我的实战过程。

注意以下 shell 命令的提示符,需要权限的以 # 开头,不需要的以 $ 开头

 

1. 安装

  1. 环境
    出于权限和安全考虑,我在本地虚拟机上安装 tmux
    虚拟机:CentOS 6.5 (2.6.32-431.el6.x86_64)
  2. 安装包准备
    tmux 依赖 libevent-develncurses-devel ,可以直接 yum 安装。
    tmux 安装包下载:
    $ wget https://github.com/tmux/tmux/releases/download/2.1/tmux-2.1.tar.gz
    tmux 官网:https://tmux.github.io/
  3. 安装
    • 安装 libevent-develncurses-devel
      # yum install libevent-devel ncurses-devel
    • 安装 tmux
      bash $ tar zxvf tmux-2.1.tar.gz $ cd tmux-2.1 $ ./configure $ echo "以下两行将过程回显重定向到log文件,方便过滤普通输出,只显示错误" $ echo "如果没有任何输出,即表示没有错误,可以进行下一步,否则请处理错误" $ make > make.log $ echo "安装需要权限,留意是否有错误" $ sudo make install > install.log $ $ echo "安装结束了,验证是否成功" $ tmux -V tmux 2.1
  4. 错误

configure: error: "curses not found"

在第一次安装时出现这个错误,搜了一下,结论是需要安装 ncurses-devel ,直接 yum install ncurses-devel 即可解决。

tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

32 位系统:ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
64 位系统:ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

 

2. 文档和配置

  • 命令及键设置
    • 启动:tmux
    • 启动一个 detached 的 session:tmux attach
    • Usage: bash tmux [-2Cluv] [-c shell-command] [-f file] [-L socket-name] [-S socket-path] [command [flags]]
    • 默认快捷键入口 C-b (Ctrl-b) ,即先按 C-b 才能使用其它的快捷键:

Session 和其他相关快捷键快捷键功能

说明
C-z 关闭 tmux
: 进入 tmux 命令行模式
? 列出所有快捷键
t 显示时间
d 退出当前 tmux 客户端,tmux 后台运行
$ 重命名当前 session
s 切换 session 显示所有 session 并切换到某一个 session
( 切换 session 切换到上一个 session
) 切换 session 切换到下一个 session
L 切换 session 到前一个活跃的 session

Window 相关快捷键快捷键功能

说明
c 新增一个 window
& 退出当前 window
, 重命名当前 window
l 跳转到上一个所在 window
i 显示当前 window 的信息
w 切换 window 显示所有 window 并切换 window
0 to 9 切换 window 到相应编号的 window
p 切换 window 上一个 window
n 切换 window 下一个 window
' 切换 window 到输入编号的 window
f 切换 window 到搜索到的 window
空格 改变当前 window 下的 pane 布局

Pane 相关快捷键快捷键功能

说明
! 从 window 移除当前 pane
" 将当前 pane 变成上下两个 pane
% 将当前 pane 变成左右两个 pane
x 关闭当前 pane
q 显示 pane 的索引
z 最大化或者恢复当前 pane
{ 跟前一个 pane 交换位置
} 跟后一个 pane 交换位置
o 切换 Pane 到下一个 pane
; 切换 Pane 进入到前一个操作过的 pane
方向键 切换 Pane 使用方向键切换到相应方向的 pane

详细文档:http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux&sec=1

还有一个重要的命令: set synchronize-panes,用于同步操作当前 Window 内的所有 Pane,执行一次进入同步操作,再执行一次则退出。(完整操作为:按快捷按入口 C-b 进入快捷键操作 -> 按 : 进入命令行模式 -> 输入 set synchronize-panes 回车确认,可输入set sync TAB 补全)

  • 调整配置

由于 C-b 这个快捷键实在不好按,一般改成其它键,搜了一下,貌似很多人改成 C-a ,我改成了 ` (backtick) 键,这个是刚需,别的顺便网上抄了抄:

vim ~/.tmux.conf(注:此文件需要自己创建)

# 用 ` 替换 C-b 
unbind C-b
set -g prefix `
bind-key ` send-prefix

# 使用Ctrl和方向键方便切换pane
bind-key -n "C-Up"               select-pane -U
bind-key -n "C-Down"             select-pane -D
bind-key -n "C-Left"             select-pane -L
bind-key -n "C-Right"            select-pane -R

# 解决putty不能使用Ctrl+方向键的问题
set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@:XT:Ms=\E]52;%p1%s;%p2%s\007:Cc=\E]12;%p1%s\007:Cr=\E]112\007:Cs=\E[%p1%d q:Csr=\E[2 q,screen*:XT,*256col*:colors=256"

# key bindings for horizontal and vertical panes
unbind %
bind | split-window -h      # 使用|竖屏,方便分屏
unbind '"'
bind - split-window -v      # 使用-横屏,方便分屏

 

3. 实战

  • 环境

因为权限和安全问题,并没有在跳板机上安装 tmux ,而是选择了在本地虚拟机上安装。如果能安装在跳板机上,可以选择从跳板机上开多个 ssh 出去,而不是从本地开多个 ssh 到跳板机。

  • 连接
    putty 进入虚拟机,并启动 tmux:
$ tmux

操作 4 次:[按 C-b,按 Ctrl+| ] ,产生 5 个竖着的分屏。按空格键调整布局为满意为止

每个 Pane 中 ssh 到一台服务器,就完成了 5 台服务器的连接。

  • 执行命令 set synchronize-panes,进入同步操作,在当前 Pane 中的任何动作都会同步到当前所有 Pane 中,可以同步操作 vim 完成所有 Pane 的脚本编辑。(当然前提是 5 台机器环境一致)

sar.sh 是监控入口,执行完毕后通过 r.sh 分析计算,直接将结果打印出来

  • 现在在同步模式下,输入 ./sar.sh 开启 5 台机器的监控,完成后按下 Ctrl-C 终止全部收集,再输入 ./r.sh 分析结果 ……

 

4. 神转折

写到这里,突然想起在哪里看过一个自动化运维工具,可以批量远程执行命令,不记得名字随手搜了一下,发现了 N 个:Ansible , Fabric , essay , Salt Stack , Puppet Chef 。所以接下来,又有新的风景了 ……

 


References:

https://tmux.github.io/

http://blog.sina.com.cn/s/blog_69cdee7f010184tx.html

http://www.nigeldunn.com/2011/12/11/libevent-2-0-so-5-cannot-open-shared-object-file-no-such-file-or-directory/

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux&sec=1

http://www.cnblogs.com/rond/p/4466599.html

http://superuser.com/a/271791

共收到 5 条回复 时间 点赞

我是单窗口重度用户。。。

我喜欢用 screen 命令来支持多窗口操作

从 screen 转 tmux 的路过,改下配置,无缝对接

看不懂啊,叫受,追不上叫受了

#4 楼 @huanzhijin 你竟然。。要追叫受

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册