FPs

Articles with the Linux tag

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 ->

Raid 常見操作速查一

raid

盘阵初始化

使用lspci 命令或者PCI 插槽信息,判定Raid 卡類型,選擇對應工具。

RAID 控制器

  • LSI系列的RAID卡控制器,使用megacli工具处理。
    • 03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] (rev 05)
  • Adaptec系列RAID卡控制器,使用arcconf工具处理。
    • 02:00.0 RAID bus controller: Adaptec AAC-RAID (rev 09)
  • Compaq系列RAID卡控制器,使用hpacucli工具处理
    • 02:01.0 RAID bus controller: Compaq Computer Corporation Smart Array 64xx (rev 01)
  • Dell PowerEdge Expandabl系列RAID卡控制器,使用megacli工具处理。
  • 02:0e.0 RAID bus controller: Dell PowerEdge Expandable RAID controller 5
  • DELL 某系列盘阵控制器,使用omreport工具

非RAID 控制器

  • Atto的SCSI控制器
    • 05:00.0 Serial Attached SCSI controller: Atto Technology SAS Adapter

搜索dmesg日志得到硬盘型号 dmesg | grep -i "ata\|scsi"
SCSI控制器相关硬盘信息查看:

sudo lsscsi

[0:0:0:0]    cd/dvd  Dell     Virtual  CDROM   123   /dev/scd0
[1:0:0:0]    disk    Dell     Virtual  Floppy  123   /dev/sdc
[2:0:0:0]    disk    ATA      Maxtor 7L250S0   1G10  /dev/sda
[2:0:4:0]    disk    SEAGATE  ST3300555SS      T105  /dev/sdb
Continue ->