FPs

Articles with the linux tag

echo 输出导致SCP 失效的问题

搭建了一个跳板机,强制使用密钥对登陆机器,同时需要用户在本地开启ForwardAgent,跳板机上创建SSH_AUTH_SOCK,透传私钥。然而常常有用户在本地没有正确配置,导致上了跳板机之后,再SSH 就会失败,于是我在跳板机的.bashrc 上写了一段检测脚本,如果变量$SSH_AUTH_SOCK 不存在,就引导用户去看Wiki,不要烦我啦!

用了一段时间,有用户发现scp 文件到跳板机时会失败,Google 一下:SCP doesn't work when echo in .bashrc?,怎么判断当前会话是scp?:Can I tell if I'm in an scp session in my .bashrc?

改下脚本:

if [ -n "$PS1" ] && [ -z $SSH_AUTH_SOCK ];then
   echo ""
   echo "创建SSH_AUTH_SOCK 失败!"
   echo "1.请在本机执行 ssh-add 添加私钥至 ssh-agent"
   echo "2.请在~/.ssh/config 配置:ForwardAgent yes"
   echo "详细帮助:wiki..."
   echo ""
fi

搞定!


Linux *top

linux_perf_tools_full
图片来源:brendangregg.com/brendangregg.com

Linux 下有很多 *top 工具,收集一番😛 。
apachetop atop biotop cachetop ctop dnstop filetop gtop hatop htop iftop iotop itop jnettop kerneltop latencytop logtop lttngtop mtop mytop ntop numatop pgtop powertop ptop qtop radeontop 。。。

Continue ->

ioping

ioping

发现一个有趣的工具 - ioping,类似常用的ping 命令。ping 用来ping 网络,看延时、丢包等等,ioping 用来 “ping” IO,看IO 耗时,读写速度等等。

ioping

simple disk I/0 latency measuring tool

用常见的包管理工具就可以安装上,

apt/yum/dnf/brew install ioping

ping 命令基本无害,不过ioping 据说可能会损坏数据,得小心使用。

安装之后,man 一下查看手册,会发现选项还挺多:每一次写入的大小,写入/读取请求的间隔,请求的总次数,同步/异步 IO, direct I/O 、cached I/O 多种模式等等。

默认一个数据块是4k ,可以选择写入,读取,或者读写交替模式,以前简单的IO测试都是用dd,以后可以试一试用ioping,当然,专业严谨的压测还是得用fio

具体语法和示例,可以参考以下资料:


禁用透明大页

tl;dr(长话短说)

“透明大页(Transparent Hugepages)”是一个Linux 内核特性,它通过提高处理器的内存映射硬件的使用效率(译注:降低TLB Miss 和page fault,提高TLB 的命中率,这部分基础知识可以翻下操作系统书)来获取更好的性能。在绝大多数Linux 发行版中它是被默认启用的(“enabled=always”)。

透明大页能让一些应用程序的性能提高一点点(最好的情况大约是10%,一般在0~3%),但是它会造成很明显的性能问题(参考:1.mongodb,2.oracle, 3.splunk), 甚至会造成严重的内存泄漏(参考:1.digitalocean,2.golang/go).

为了避免这些问题,你应该将运行的服务器设置成enabled=madvise

echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

并在服务器的内核命令行上设置transparent_hugepage=madvise(例如在/etc/default/grub 中设置)。

这样修改之后,应用程序能通过透明大页提升性能,也能避免上述问题(译注:设置成madvise,应用程序通过设置MADV_HUGEPAGE标志就能分配到大页,不需要的程序则不受影响)。

继续阅读了解更多细节。

Continue ->

htop 解释

"Explanation of everything you can see in htop/top on Linux"

“解释你在Linux 上htop/top 中看到的所有内容”

很长一段时间我都不清楚htop 中所有内容的意思。
我曾经以为我的双核机器上1.0的平均负载意味着CPU 利用率是50%。这并不完全正确。而且,为什么是1.0呢?

我决定查清楚,并记录成这份文档。

大家也都说,学习事物的最好方式是通过教别人。

Ubuntu Server 16.04 x64 上的htop

这是一张我要解释的htop 截图。
canyoukillit-before

Continue ->

一个改良的Ping

Ping 是一个非常常用的命令,有2种情况会使用它:
一是会从浏览器的地址栏或者其他人发给我的网址,复制,然后进行ping,带着协议以及一堆uri和args,
例如: https://accounts.google.com/AddSession?hl=en...
二从Linux 系统的网络地址复制过来IP,进行Ping,带着掩码位数,
例如:192.168.1.1/32

以上2种情况,如果直接复制内容到终端,然后ping,会提示:

ping: cannot resolve ....: Unknown host

很恼人,写一个简单的脚本:

#!/usr/bin/env bash
#author: fangpeishi@gmail.com
#issues:
#  - http(s)://xxx.xx/xxx/xx?xxx
#  - 192.168.1.1/32

new_args=`echo $@ |sed  's/http.*\:\/\///' |sed 's/\/[^ ]*//'`
#echo ${new_args}
ping ${new_args}

把这个脚本命名为pin, 放到 /bin 之类的目录下面即可(本来想做成alias,没成功),最终效果如下:
pin


记一个退出终端进程不退出的问题

某一天开发同学问了一个问题,他们在线上跑一个job,没用screen,nohup,把iTerm 窗口关了,job 没挂。再登录进去看,PPID 变成1,即进程被init 进程接管。
在对应机器上执行shopt, 发现:

...
gnu_errfmt      off
histappend      off
histreedit      off
histverify      off
hostcomplete    on
huponexit       off
interactive_comments    on
lastpipe        off
lithist         off
login_shell     on
mailwarn        off
...

注意CentOS 7 默认将huponexit 设为off 了,这样在用户将Shell 退出结束会话时,系统不会发送 SIGHUP 给所有进程,这效果其实类似使用了nohup,nohup 的作用就是忽略HUP 信号。

huponexit
  If set, bash will send SIGHUP to all jobs when an interactive login shell exits.

Raid 常见操作速查二

raid5

盘阵操作

  • Mega 使用megacli
  • Adaptec 使用 arcconf
  • 具体使用lspci查看盘阵卡信息。

Megacli

常见操作

  • 显示盘阵总体状况
    • megacli -ShowSummary -a0 // -a0 表示第一个控制器
  • 获取控制器日志
    • megacli -AdpAlILog -a0 //-a0表示第一个控制器

注意: 不是单词 All,而是大写字母 A、小写字母 L 和大写字母 i。

  • 获取控制器状态
    • megacli -AdpAllInfo -a0
  • 获取控制器上的硬盘信息
    • megacli -PdList -a0
  • 定位某块磁盘(通过控制盘阵上对应的指示灯)
    • megacli -PdLocate -start -PhysDrv[0:5] -a0 // 0:5 是要定位的磁盘的 Enclosure ID 和 Slot Number
  • Offline 某块磁盘

    • megacli -PDOffline -PhysDrv[0:5,0:6] // 0:5, 0:6 分别是要 Offline 的磁盘的 Enclosure ID 和 Slot Number
  • 准备移除磁盘(将 Cache 中的数据写回磁盘中,如果不写回的话新加的硬盘可能会不被识别)

    • megacli -PdPrpRmv -PhysDrv[0:5] -a0 // 0:5 是将要移除的磁盘的 Enclosure ID 和 Slot Number
  • 获取盘阵信息

    • megacli -EncInfo -a0
  • 获取盘阵状态

    • megacli -EncStatus -a0
  • 获取盘阵 vdisk 和 pdisk

    • megacli -LdPdInfo -a0 //显示方式一般是 vdisk,然后是 vdisk 包含的 pdisk,然后再是 vdisk,pdisk 等
  • 显示特定 vdisk 的信息

    • megacli -LdInfo -Lx -a0 // x 是要显示信息的 vdisk 编号,或者 all
  • 获取控制器 RAID 配置信息

    • megacli -CfgDsply -a0
Continue ->