做性能测试时,离不开服务器性能监控,当要同时监控多台机器的性能时,就需要一些多窗口/会话控制的工具了。尝试了一下 tmux
,感觉比 XShell
、 SecureCRT
要更适合这样的场景。个人比较喜欢 putty
,tmux
刚好补充它的多窗口短板。SecureCRT
的键映射和脚本也是很方便的功能。另外多窗口管理还有一个 Screen
,但 tmux
比它多了一个会话管理功能,可以随时保存和恢复会话。作为一个新手,写一下我的实战过程。
注意以下 shell 命令的提示符,需要权限的以 #
开头,不需要的以 $
开头
tmux
依赖 libevent-devel
和 ncurses-devel
,可以直接 yum
安装。
$ wget https://github.com/tmux/tmux/releases/download/2.1/tmux-2.1.tar.gz
libevent-devel
和 ncurses-devel
:
# yum install libevent-devel ncurses-devel
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
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
tmux
tmux attach
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 # 使用-横屏,方便分屏
因为权限和安全问题,并没有在跳板机上安装 tmux
,而是选择了在本地虚拟机上安装。如果能安装在跳板机上,可以选择从跳板机上开多个 ssh 出去,而不是从本地开多个 ssh 到跳板机。
$ 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
分析结果 ……
写到这里,突然想起在哪里看过一个自动化运维工具,可以批量远程执行命令,不记得名字随手搜了一下,发现了 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