xin片之争,已经暴露了中国xin的问题,我等码农束手无策;而在操作系统方面,成果也是乏善可陈;现如今酷炫的Web监控工具,让很多研发丧失了真正处理问题的能力。

越接近底层,就越接近真相,在计算机的世界,同样适用。

我们的目的,就像是《荒岛余生》一样:找到一个信念,在最残酷的环境中,生存下去。说的比较隐晦,其实就是:你换公司了,而你的新公司比较推崇devops,你要自己面对问题。

吹的那么高大上,一副拯救世界的感觉,但本系列的文章知识并不深,很多已经在大学里的操作系统见过了,虽然照读课本的叫兽并不能让你勾起丝毫兴趣。

如果本系列能够勾起你的些许兴趣,就算目的达到了。本来是想要聊仔细点,但由于时间有限,又不是写书,原理性的东西就不多说了。

内容

文章将会尝试单纯的Cpu、Mem、Net、Disk、IO问题排查,然后组合各种元素,解决一些棘手问题,就是一些常用命令的组合。当然我们是java系的,所以会多一些java方面的讨论。如果你不了解行文风格,可以先读读:《Java堆外内存排查小结--小姐姐味道》

为什么Linux系统会出现这样那样的问题呢?主要的原因就是计算机的各个部件的速度不均衡。Cpu在等cache line,cache 在等内存,内存在等设备。就像在连续17公里高速下坡路口设个收费站一样,一不小心就车毁人亡。

设备五花八门,通常我们接触的设备,就是硬盘和网卡。整个业务系统和操作系统充斥着各种各样的缓冲区,CPU要通过中断负责他们之间的协调。这样,会有很多地方会发生bottleneck。

监控值

排查问题也是有过程的。通常,关注一个硬件资源,比如CPU,我们关注以下基本要素: 1) 利用率 一般是瞬时值,属于采样范围,用来判断有没有峰值。比如cpu utilization 2) 饱和度 一般指资源已完全使用,新请求在特定queue里排队。比如cpu load过高 3) 错误信息 硬件或者驱动错误,比如dmesg命令显示的OOM 4) 联想信息 对引起的原因进行猜测,并用更多的工具验证猜想。比如系统响应慢猜测大量用到了swap

原因

监控值只是一种表象,具体引起的原因才是重点。我们通常希望纯粹的资源限制所引起的故障,这种问题都比较好定位。大多数情况下都没那么幸运,所以广度上的信息共享能帮助很多。过程如下:

1) 信息收集 问题起始时间,上下文 2) 改动集合 问题发生前所有变更列表 3) 问题抽象 将描述抽象成具体的资源问题 4) 问题排查 将信息整理完毕,就可以进行真正的荒野之旅了

测试

本测试用来决定你是不是本文目标受众,如果无法回答以下问题,建议先看一点基本的Linux知识,这将会节省你的时间,因为文章不会对此提太多。

  • io wait 是什么意思?
  • swap是什么分区,怎么关闭?
  • /tmp目录有什么特殊性?
  • 管道是什么东东?

Linux发行版

接下来热热身,瞧瞧Linux有什么发行版。

我这里挑选了6个代表性的版本,版本聚焦的功能向专业化和个性化发展。其中,Centos作为最常见的服务器版本,占据了大量的市场份额;Ubuntu在GUI和易用性上赢得了桌面用户;Kali代表了向专业化发展的一个分支。

个人使用时间最长的是archlinux,尤其喜欢它的滚动升级功能。但由于Centos在服务器端的市场份额实在太大,我们以下的讨论都基于Centos。

据不完全统计,已经有上千个linux版本,见下图(高清大图见 distrowatch.com/images/othe… )。你来告诉我,红旗、麒麟的位置在哪里。

将常用脚本加入到PATH中

有些命令组合不好记,频繁输入也觉得烦,可以将这些过程整理成脚本,扔到path中。

还记得第一次安装jdk,添加的环境变量么?Linux和它类似,不过它有多种shell

通常我们用的叫bash,平常说的shell脚本就是bash脚本。但也有很多其他好用的shell,比如csh、ksh、zsh等。

查看/etc/shells文件看一下你安装过的shell

[root@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/bin/zsh
/sbin/nologin
/bin/dash
复制代码

在个人领域,zsh配合oh-my-zsh(推荐)达到最佳,但服务器一般不会去改你的shell,通过一个环境变量,能够看到你当前所使用的shell终端。

[root@localhost ~]$ echo $SHELL
/bin/bash
复制代码

针对于bash,我们的配置就在用户目录下的.bashrc文件中。

在用户目录下创建.bin目录

mkdir ~/.bin
复制代码

将目录加入到环境变量PATH中

echo "export PATH=\$PATH:~/.bin/" >> ~/.bashrc
复制代码

在.bin创建一个文件xjj,内容为 echo "pleasant taste"

cat > ~/.bin/xjj <<EOF
echo "pleasant taste"
EOF
复制代码

给xjj增加可执行权限

chmod a+x ~/.bin/xjj
复制代码

这样,使用你的用户,在任何地方,都可以执行xjj了

[root@localhost ~]$ xjj
pleasant taste
复制代码

真是令人愉悦的味道~

Linux之《荒岛余生》(一)准备篇的更多相关文章

  1. Linux 设备模型浅析之 uevent 篇(2)

    Linux 设备模型浅析之 uevent 篇 本文属本人原创,欢迎转载,转载请注明出处.由于个人的见识和能力有限,不可能面 面俱到,也可能存在谬误,敬请网友指出,本人的邮箱是 yzq.seen@gma ...

  2. linux学习心得之vim/Cvim篇

    linux学习心得之vim/Cvim篇 在linux 下,vim 时一种最常见的编辑器,很多linux的发行版就自带了.我的是CentOS 6.3. 基本上Vim共分为3种模式,分别是一般模式,编辑模 ...

  3. 【转】一文掌握 Linux 性能分析之 I/O 篇

    [转]一文掌握 Linux 性能分析之 I/O 篇 这是 Linux 性能分析系列的第三篇,前两篇分别讲了 CPU 和 内存,本篇来看 IO. IO 和 存储密切相关,存储可以概括为磁盘,内存,缓存, ...

  4. linux学习:【第3篇】远程连接及软件安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...

  5. linux学习:【第2篇】常用命令

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第2篇]常用命令 基本命令 //打开终端: CentOS:在任何地方,右键-- ...

  6. linux学习:【第1篇】初识Linux及安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第1篇]初识Linux及安装 写在前面 学习之初看了一段文章,很有感触,所以也 ...

  7. Linux服务器部署系列之八—Sendmail篇

    Sendmail是目前Linux系统下面用得最广的邮件系统之一,虽然它存在一些不足,不过,目前还是有不少公司在使用它.对它的学习,也能让我们更深的了解邮件系统的运作.下面我们就来看看sendmail邮 ...

  8. Linux服务器部署系列之七—OpenLDAP篇

    LDAP(轻量级目录访问服务),通过配置这个服务,我们也可以在linux下面使用目录的形式管理用户,就像windows下面的AD一样,方便我们管理.下面我们就一起来配置openldap服务.本文运行环 ...

  9. Linux服务器部署系列之一—Apache篇(下)

    接上篇 linux服务器部署系列之一—Apache篇(上)    四.管理日志文件 Apache日志分为访问日志和错误日志两种: 1)访问日志 用于记录客户端的访问信息,文件名默认为access_lo ...

随机推荐

  1. Python Request-学习笔记(1)

    #导入Requests模块:import requests # 然后,尝试获取某个网页.返回的是reaponse对象,可以从这个对象中获取所有我们想要的信息.response = requests.g ...

  2. app扫描二维码登陆

    先说明一下实现原理: 如同微信扫描登陆一样,就是一种pc的自动登陆授权.在网站首页得有切换登陆的选项:密码登陆 扫码登陆 当用户切换到扫码登陆时,向服务器请求一次获得一个唯一的uukey 利用这个uu ...

  3. lr集合点

    集合点:rendezvous point =====>>loadrunner的虚拟用户中,并发concurrent\ 同时simultaneous的区别: concurrent并发:指虚拟 ...

  4. 实时OLAP分析利器Druid介绍

    文章目录 前言 Druid介绍 主要特性 基础概念 数据格式 数据摄入 数据存储 数据查询 查询类型 架构 运维 OLAP方案对比 使用场景 使用建议 参考 近期主题 前言 项目早期.数据(报表分析) ...

  5. PostgreSQL中RECURSIVE递归查询使用总结

    RECURSIVE 前言 CTE or WITH 在WITH中使用数据修改语句 WITH使用注意事项 RECURSIVE 递归查询的过程 拆解下执行的过程 1.执行非递归部分 2.执行递归部分,如果是 ...

  6. std::string::substr函数

    string substr (size_t pos = 0, size_t len = npos) const;

  7. 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数

    包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...

  8. matlab将数据读取和写入txt文档

    原文链接 matlab中打开文件 fid = fopen(文件名,‘打开方式’): 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功. 另外,在这些字符串后添加一个“t”,如‘ ...

  9. stand up meeting 12-2

    今天因为各位组员组里项目原因没有集中在一起进行stand up meeting.但是士杰和天赋国庆分别对项目进度和前后端的结合进行的沟通. 针对后端部分,天赋完成了GetRankingData API ...

  10. 详解 Lambda表达式

    Lambda表达式 概述: Lambda 是一个匿名函数, 我们可以把 Lambda表达式理解为是一段可以传递的代码 (将代码像数据一样进行传递) 可以写出更简洁.更灵活的代码. 作为一种更紧凑的代码 ...