鹅厂后台开发工程师的工作日常

写在前面  :本故事纯属虚构,如有雷同,不负责任。为了整理 Linux 开发和日常使用的常用命令,想了好几天才串了这么个故事 。虽然有点牵强,但是内容还是挺干的~欢迎大家点评。

在很久很久以前,鹅厂开发类工程师职级分为: 助理工程师、工程师、高级工程师和专家工程师四大类。

小特特从北京某学校毕业后,据传因为其性别比较突出,所以很幸运地拿到了工程师的职级,并在毕业后顺利成为了一只新鹅。

1. 班车风云

这天,小特特顶着乱糟糟的头发,穿着拖鞋和短裤,斜挎着塑料编织袋,抓上工卡和手机就挤上了最晚的一趟班车。

正当其憨憨入睡时,手机不知趣地响起了一阵"悦耳"的铃声。 那独一无二的动听旋律,小特特不用拿出手机便已知是公司的告警电话。

她慌慌张张从编织袋里拿出手机,按下接听后,一个熟悉的机器女声: "您有一个硬盘告警,IP为...",话音未落,小特特就按下了 1 而自动结束了这次人机对话。

2. 办公室之殇

来到工位后,小特特既娴且熟地打开 xshell 登录到跳板机后,使用 ssh xiaott@1.2.3.4 登录到了硬盘告警的机器。 输入 sudo su - worker 切换到 worker 用户后,小特特使用 df -h 命令查看完各分区的容量,再快速输入 du -h --max-depth=1 命令查看当前目录下各文件(及文件夹)的大小。 发现 xxx.log 文件占用了近 100 G空间后,她果断地使用了 rm xxx.log 命令将其进行了删除。

删除完文件后,小特特还执行了下 ls –lhS 命令将当前目录下各文件以从大到小的顺序进行展示。

处理完硬盘告警后,小特特通过 ssh 远程连接到了个人云开发机,开始使用 Vim 进行日常开发。 <Ctrl n> 自动补齐, ctags 进行函数跳转, filetype 设置语法高亮,quickfix 列表快速编译,vim-fugitive 插件实现在 Vim 中完成各种 git 操作。 随着自定义配置和插件的逐步完善,小特特已经能够在 Vim 下完成日常的开发工作。

正当其在代码的世界徜徉时,企业微信上弹出了一个线上服务告警通知。 为了避免出现重大外网事故,小特特赶紧登上了告警服务所在的一个机器,先使用 cd 命令切换到服务的运行目录,再使用 tail -f xxx.log.20191212 实时滚动下服务日志。

从滚动的命令行发现错误 log 均出现在请求某个外部 CGI 接口后,小特特使用 awk '-F,' '{if ($666==110) print $999}' xxx.log.20191212 提取出了返回错误的所有 URL。

为了确认是否是必现错误,小特特使用 curl -d 命令模拟了一次请求。 由于内部请求使用的是 HTTP 协议,小特特还使用 tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' 对模拟请求进行了抓包分析。

小特特确认错误原因是外部接口超时未返回后,立即联系了该接口对应的负责同学。 处理完这个问题后,小特特继续了她的开发工作。

当需要安装某个开源库时,小特特使用 rz -bey 命令将本地 Windows 机器上的压缩包传到了开发机,然后使用 md5sum xxx.tar.gz 命令验证传输的文件是否正确,最后再使用 tar xvzf xxx.tar.gz 命令将压缩包解压后进行使用。

find -type f -name README.md 命令在当前工作目录中查找名为 README.md 的所有文件。

临近黄昏时,又一个进程占用 CPU 过高的告警出现在了手机上。 登录上机器后,小特特先使用 history | tail -n 200 查看最近执行过的命令列表,看下是否有异常情况。 确认无异常后,她使用 top 命令查看系统的 CPU、内存等的使用情况。

top 命令的基本视图中,按数字 1 监控每个逻辑 CPU 的使用情况; P 实现按 CPU 降序排列,按 M 按内存降序排列。

为进一步查看系统运行现状,小特特还使用 free -h 命令查看了内存的使用情况。 发现确实是因为用户请求量增加而导致服务使用 CPU 和内存过高后,小特特急忙通知了运维同学进行了扩容处理。

晚上九点半,小特特基本完成了一天的开发工作,为了测试下新开发的功能是否正常。 编译通过后,使用 nohup xxx 9999 启动了进程,并监听在 9999 端口。

启动完进程后,小特特使用 netstat -anp | grep -w 9999 命令确认进程确实在监听 9999 端口。 测试过程中,她发现进程加载的一个外部 so 动态库对应功能并没有生效, lsof xxx.so 命令也显示启动的进程并没有加载该 so 文件。

使用 GDB 调试时发现,该 so 并没有导出函数 fffff nm -D xxx.so | grep fffff 命令也证实了该 so 确实没有导出该函数。

因为这个 so 是其他团队提供的组件,所以小特特通过 sz 命令将该文件传输到 Windows 机器上后发到了企业微信群进行讨论。

同时,小特特使用 ps aux | grep -w xxx| grep -v grep | awk '{print $2}' | xargs kill -9 停掉了测试进程 xxx

3. 结语

数了下,文中出现了近 30 个 Linux 命令,我"太男"了。 熟练使用这些命令,个人觉得已经可以应付 Linux 下的初级开发和运维工作了。

欢迎关注

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章