FPs

Articles with the linux tag

ip_local_port_range 小问题

发现系统打印了一条日志,类似redhat solution:2887631

Jan 23 14:37:22 localhost kernel: ip_local_port_range: prefer different parity for start/end values.

意思是建议将/proc/sys/net/ipv4/ip_local_port_range 的两个数设置一个奇数,一个偶数。

Continue ->

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.