大家好,感谢邀请,今天来为大家分享一下Linux 《荒岛余生》(1)准备工作的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
越接近真相,就越接近真相,在计算机世界也是如此。
我们的目的就像《荒岛余生》一样:寻找在最残酷的环境中生存的信念。有点模糊,但实际上是这样的:你换了公司,新公司更喜欢devops,所以你必须自己面对问题。
听起来多么意气风发,有种拯救世界的感觉,但是这个系列文章的学问并不深。其中很多都是在大学的操作系统中见过的。虽然看课本根本不会引起你的兴趣。
如果这个系列能够引起你的一些兴趣,那么它的目的就达到了。本来想详细讲一下,但由于时间有限,又没写书,就不讲原理了。
内容
本文将尝试解决简单的Cpu、Mem、Net、Disk、IO问题,然后结合各种元素来解决一些疑难问题,也就是一些常用命令的组合。当然,我们是学Java的,所以我们会更多地讨论Java。如果看不懂行文,可以先看一下:《Java堆外内存排查小结—小姐姐味道》
为什么Linux系统会出现这样的问题呢?主要原因是计算机各部件的速度参差不齐。 CPU在等待缓存行,缓存在等待内存,内存在等待设备。就像在17公里连续的高速公路下坡路口设置收费站一样,一不小心,车就会被毁,人就会被撞死。
设备种类繁多,我们平时接触到的设备就是硬盘和网卡。整个业务系统和操作系统都充满了各种缓冲区,CPU通过中断负责它们之间的协调。这样一来,就会有很多地方出现瓶颈。
监控值
还有一个解决问题的过程。通常,在关注CPU等硬件资源时,我们关注以下基本要素: 1)利用率一般是瞬时值,属于采样范围,用于判断是否存在峰值。例如,cpu利用率2)饱和通常意味着资源已被完全使用,新的请求在特定队列中排队。例如cpu负载过高3) 错误信息硬件或驱动错误,如dmesg命令显示的OOM 4) 联想信息猜测原因,并使用更多工具来验证猜测。例如,如果系统响应缓慢,则可能是swap被大量使用。
原因
监测值只是表象,具体原因才是重点。我们通常希望纯粹由资源限制引起的故障更容易定位。大多数时候你没有那么幸运,所以广泛分享信息会有很大帮助。流程如下:
1)信息收集:问题开始时间、上下文2)变更集:问题发生前所有变更的列表3)问题抽象将描述抽象为具体的资源问题4)问题排查信息整理好后,就可以开始真正的旅程了进入荒野
测试
io wait 是什么意思?
swap是什么分区,怎么关闭?
/tmp目录有什么特殊性?
管道是什么东东?
Linux发行版
接下来,让我们热身一下,看看有哪些Linux 发行版可用。
我这里挑选了6个有代表性的版本,版本重点关注的功能正在向专业化、个性化方向发展。其中,Centos作为最常见的服务器版本,占有很大的市场份额; Ubuntu 在GUI 和易用性方面赢得了桌面用户的青睐; Kali 代表了专业发展的一个分支。
我用的时间最长的是archlinux,特别喜欢它的滚动升级功能。不过,由于Centos在服务器端的市场份额如此之大,所以我们下面的讨论都是基于Centos进行的。
据不完全统计,Linux版本已经有上千个,如下图(见高清图)
https://distrowatch.com/images/other/distro-family-tree.png
)。快来告诉我红旗和独角兽在哪里。
将常用脚本加入到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 pleasure"
cat ~/.bin/xjj 给xjj添加可执行权限
chmod a+x ~/.bin/xjj 这样,使用你的用户,你就可以在任何地方执行xjj