详解 Linux 运维工程师打怪升级篇

积累经验篇

做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点。

运维工程师 是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化。如:今年大数据,人工智能比较火。。。(相对表示就是 python 比较火)

前面也讲了运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能算非常精通吗,但是熟悉和熟练还是相对可以的。

初级篇
详见:详解Linux运维工程师入门级必备技能

拓扑详见:

中级篇

从我后面面试经历和面试别人的经历。有些人认为,其实运维就是部署某个软件,设置些基础功能,就算会运维了。

举个例子:安装LAMP,LNMP,就感觉部署方法我都掌握了。其实网上大多数都有一键安装脚本啥的根本没有啥技术含量,在面试官眼里,这些都不是你的亮点。基本到了公司一般环境架构都是部署好的,很少需要你去变动环境架构。就算你安装好 LNMP 架构你熟悉里面的原理吗,熟悉 Nginx 优化吗,熟悉 MySQL 优化吗?

再举个例子:我面试遇到的问题,面试官问你既然熟悉 LNMP 架构,那么 Nginx 反向代理的作用。

你应该不是说出懂这个软件和配置,你尽可能的说怎么优化,怎么深入提高网站性能。

1、使用反向代理可以理解为7层应用层的负载均衡,使用负载均衡之后可以非常便捷的横向扩展服务器集群,实现集群整体并发能力、抗压能力的提高。

2、通常反向代理服务器会带有本地 Cache 功能,通过静态资源的 Cache,有效的减少后端服务器所承载的压力,从而提高性能。

下面说说运维在工作中需要掌握的核心技术

注意,这是在工作中掌握的,在学习中很难掌握。

1、第一条最主要的排错

● 分析部分程序不能运行或没有按预想结果运行的原因,对程序运行跟踪,查看系统调用的过程。

● 较深入的系统瓶颈点分析。

查看剩余内存:

free -m
#-/+ buffers/cache:       6458       1649
#6458M为真实使用内存  1649M为真实剩余内存(剩余内存+缓存+缓冲器)
#linux会利用所有的剩余内存作为缓存,所以要保证linux运行速度,就需要保证内存的缓存大小

系统信息:

uname -a              # 查看Linux内核版本信息
cat /proc/version     # 查看内核版本
cat /etc/issue        # 查看系统版本
lsb_release -a        # 查看系统版本  需安装 centos-release
locale -a             # 列出所有语系
locale                # 当前环境变量中所有编码
hwclock               # 查看时间
who                   # 当前在线用户
w                     # 当前在线用户
whoami                # 查看当前用户名
logname               # 查看初始登陆用户名
uptime                # 查看服务器启动时间
sar -n DEV 1 10       # 查看网卡网速流量
dmesg                 # 显示开机信息
lsmod                 # 查看内核模块

硬件信息:

more /proc/cpuinfo                                       # 查看cpu信息
lscpu                                                    # 查看cpu信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c    # 查看cpu型号和逻辑核心数
getconf LONG_BIT                                         # cpu运行的位数
cat /proc/cpuinfo | grep 'physical id' |sort| uniq -c    # 物理cpu个数
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l     # 结果大于0支持64位
cat /proc/cpuinfo|grep flags                             # 查看cpu是否支持虚拟化   pae支持半虚拟化  IntelVT 支持全虚拟化
more /proc/meminfo                                       # 查看内存信息
dmidecode                                                # 查看全面硬件信息
dmidecode | grep "Product Name"                          # 查看服务器型号
dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range       # 查看内存插槽
cat /proc/mdstat                                         # 查看软raid信息
cat /proc/scsi/scsi                                      # 查看Dell硬raid信息(IBM、HP需要官方检测工具)
lspci                                                    # 查看硬件信息
lspci|grep RAID                                          # 查看是否支持raid
lspci -vvv |grep Ethernet                                # 查看网卡型号
lspci -vvv |grep Kernel|grep driver                      # 查看驱动模块
modinfo tg2                                              # 查看驱动版本(驱动模块)
ethtool -i em1                                           # 查看网卡驱动版本
ethtool em1

● 使用分析系统分析web日志。(如逆火软件,)

● 分析系统性能瓶颈点(IO/memory/cpu,常用工具,top命令中shift组合键的特殊用Sar/vmstat/iostat/ipcs)

日志管理常用命令:

history                      # 历时命令默认1000条
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "   # 让history命令显示具体时间
history  -c                  # 清除记录命令
cat $HOME/.bash_history      # 历史命令记录文件
lastb -a                     # 列出登录系统失败的用户相关信息  清空二进制日志记录文件 echo > /var/log/btmp
last                         # 查看登陆过的用户信息  清空二进制日志记录文件 echo > /var/log/wtmp   默认打开乱码
who /var/log/wtmp            # 查看登陆过的用户信息
lastlog                      # 用户最后登录的时间
tail -f /var/log/messages    # 系统日志
tail -f /var/log/secure      # ssh日志

2、优化

优化可以说是运维最吃香的技能,基本会优化的运维普遍工资很高,而且优化是要承担风险的,并不是网上搜个文章改一下配置文件或者参数就叫优化了,这样很容易造成宕机。

优化是根据实际的现场环境硬件各个参数进行部分优化,提高软件性能和网站性能。这个我只能讲半知半解,当时优化mysql和tomcat参数也是根据网上文章和官网文档查找参数在虚拟机上测试然后查看性能。

成本优化,性能优化。这里我给出 tomcat 优化 jvm 参数(做过相应测试才放到现场环境的):(记住无监控不调优)

-标准参数,所有jvm都应该支持

-X 非标,每个jvm实现都不同

-XX 不稳定参数,下一版本可能会取消

serial collector 单线程 序列化

parallel collector 多线程

启动 jvisualvm.exe 监控 dump 内存溢出

-Xms:初始堆大小

-Xmx:最大堆大小

-Xss:线程栈大小

-XX:NewSize=n:设置年轻代大小

-XX:NewRatio=n:设置年轻代和年老代的比值,如3, 标示年轻代:年老代比值1:3,年轻代占整个年轻代年老代和的1/4

-XX:SurvivorRatio=n:年轻代中的eden区与2个Survivor区的比值。

-XX:MaxPermSize=n:设置持久代大小

收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseConcMarkSweepGC:设置并发收集器

回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-Xloggc:filename

tocmat 优化 确认有几个 jvm 虚拟机

set JAVA_OPTS=

-Xms4g

-Xmx4g

-Xss512k

-XX:+AggressiveOpts 进攻型的优化选项,所有优化项都加上

-XX:+UseBiasedLocking 优化锁,基本都要选上,偏执锁

-XX:permSize=64m 原始区大小,最大300m 类多就设置大一点

-XX:MaxPermSize=300m

-XX:+DisableExplicitGC //System.gc() 不显示调用gc

-XX:+UseConcMarkSweepGC 使用cms缩短相应时间,并发收集,低停顿

-XX:+UseParNewGC   并行收集新生代的垃圾

-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC的情况下,尽量减少mark的时间

-XX:+UseCMSCompactAtFullCollection 使用并发收集器时,开启对年老代的压缩,使碎片减少

-XX:LargePageSizelnBytes=128m 内存分页大小对性能的提升

-XX:+UseFastAccessorMethods get/set方法转成本地代码

-Djava awt headless=true  修复linux下tomcat处理图标时可能产生的bug

内存调优:

"C:\Program Files\Java\jdk1.8.0_31\bin\java" -XX:+DoEscapeAnalysis -XX:+EliminateAllocations -XX:+UseTLAB -XX:+PrintGCDetails -Didea.launcher.port=7540 "-Didea.launcher.bin.path=E:\java\IntelliJ IDEA 2016.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_31\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\rt.jar;E:\java\new\out\production\new;E:\java\IntelliJ IDEA 2016.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain aa.T02
HeapPSYoungGen      total 38400K, used 3994K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)eden space 33280K, 12% used [0x00000000d5d80000,0x00000000d61668b8,0x00000000d7e00000)from space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)to   space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)ParOldGen       total 87552K, used 0K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)object space 87552K, 0% used [0x0000000081800000,0x0000000081800000,0x0000000086d80000)Metaspace       used 3072K, capacity 4494K, committed 4864K, reserved 1056768Kclass space    used 329K, capacity 386K, committed 512K, reserved 1048576K
HeapPSYoungGen      total 38400K, used 1147K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)eden space 33280K, 3% used [0x00000000d5d80000,0x00000000d5e9ecb8,0x00000000d7e00000)from space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)to   space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)ParOldGen       total 87552K, used 0K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)object space 87552K, 0% used [0x0000000081800000,0x0000000081800000,0x0000000086d80000)Metaspace       used 3072K, capacity 4494K, committed 4864K, reserved 1056768Kclass space    used 330K, capacity 386K, committed 512K, reserved 1048576K线程本地缓存使用eden的,开启就会使用更多

tomcat 前任何参数没参加大概每秒605  调优后大概每秒435 接近3倍的结果

3、开发技能

优选 shell 和 python,现在 shell 无法满足你的需求或者效率很低,那么选择自动化 python 是最好的选择。现在普遍招聘需求要求,会写 shell 或者 python,perl 脚本,个人选择还是选 python。

python 这门语言上手比较快,容易理解。

python 在服务器管理工具上非常丰富,配置管理(saltstack) 批量执行( fabric, saltstack) 监控(Zenoss, nagios 插件) 虚拟化管理( python-libvirt) 进程管理 (supervisor) 云计算(openstack) ...... 还有大部分系统 C 库都有 python 绑定。

对于流程确定的事情,最终一定是纳入系统管理的体系,写成程序,成为系统的一部分。而不是无法复用游离与整体的各种脚本。

随着云计算时代的来临,中小型公司,不需要运维了。大型公司,没有工程开发能力的运维,是没有竞争力的。

最重要的学好 python 可以涨工资,可以涨工资,可以涨工资。(重要的事情说三遍。)

目前本人也是在学 python,正在把以前 shell 脚本的实例转换成 python 脚本。

python笔记:python实例手册(一直在看)

下载链接:http://down.51cto.com/data/2329173

4、意识篇

1) 安全意识:

运维人员的权限很大,所以一定要保证帐号/私钥的安全。

● 最好使用加密工具存储。比如truecrypt,lpassword

● 基于本地存储。切勿用网盘,也不建议用lastpass等

● ssh私钥添加密码

2) 磨刀意识:

关于任何操作配置,最好先搞明白操作或配置的原理,然后再去操作。应一句话叫做“磨刀不误砍柴功”,而且对于类似的操作可以举一反三。

3) 计划意识:

复杂的变更操作比如多台主机以及牵涉到san存储,最好先作 操作计划,写计划文档,详细致每条命令,然后请高手帮忙审核。 这样能最大程度使整个操作过程安全。如果是重要的客户业务系统,操作最好有回退方案,而一旦变更失败,客户可以在短时间内将业务回退。

4) 记录分享意识:

遇到自己认为较特殊的案例时,记得要写 案例过程及分析的文档。也方便自己以后翻看,或者和其他兄弟分享,作知识的传播以便于大家以后都能少走弯路。

5) 监控意识:

运维来说,监控是非常重要的,监控是发现系统各种异常的眼睛,所以运维应该和监控紧密配合。

6) 业务意识:

尽量了解维护的各主机上业务类型,以及各主机业务之间的关联性。因为任何维护工作都是为主机能提供业务服务的,当某业务中断,能最快的知道与此业务相关的主机群,从而缩小故障排查范围,最快定位故障。

附上运维思路拓扑图:

可以看看:安全运维理念(半神半仙亦民工)

意识是很重要,并不是你技术很牛,学的技术很多很熟,就不代表你不需要运维意识,其实领导很看重运维意识的,例如有没有做好备份,权限分配问题,平台测试情况,故障响应时间等,这些都是意识,而不是你学了很多技术自认大牛了,平台发现故障你又没什么大不子,以为很简单的问题喜欢处理就处理,不需要向其它部门反馈等,领导不是看你的技术如何,而是看你的运维意识如何,你没运维意识,技术再牛也没用,只会让其它部门的人跟你不协调。

要知道做IT这行是苦B的,需要无尽的学习,不学习只会被淘汰,不想被年轻的淘汰,就只能不断增值自己,不然不是你工资无法提升,而是你无法再从事这行。

这个世界,在悄悄惩罚不改变的人...

转载自:https://blog.51cto.com/chenhao6/1949673

感谢大牛,小白自己藏着看

Linux运维工程师发展相关推荐

  1. linux运维的发展方向

    linux运维发展常见的就是下面两条路线: 第一条:运维应用-->系统架构-->运维开发-->系统开发 第二条:运维应用-->应用dba-->架构dba-->开发D ...

  2. linux运维工程师到底是做什么的?

    linux运维工程师到底是做什么的? 如果你想要进入运维管理领域这一行,首先你应该了解linux运维工程师是干什么的.他主要是对Linux下各种网络服务.应用系统.监控系统等进行自动化脚本开发的工作, ...

  3. Linux运维工程师是做什么的?运维发展前景到底怎么样?

    Linux运维工程师到底是做什么的? 如果你想要进入运维管理领域这一行,首先你应该了解linux运维工程师是干什么的.他主要是对Linux下各种网络服务.应用系统.监控系统等进行自动化脚本开发的工作, ...

  4. Linux运维工程师主要做什么工作?

    Linux在现在社会发展是非常受欢迎的一个行业,对于从事Linux方面工作的人来说,属于互联网背后的英雄,没有他们的付出,就没有如今的互联网时代.而在Linux从事岗位之中,Linux运维工程师这样一 ...

  5. linux运维工程师工作职责

    linux运维工程师工作职责 岗位职责 运维部门经理 职位描述: 1.负责部门规划和管理,包括完善内部运维团队,技术规划,团队建设等; 2.负责运维制度的制定,包括运维制度的细化和监督执行; 3.根据 ...

  6. linux 运维工程师的前景怎么样?

    linux运维工程师的前景怎么样? 一.我无意在这里对比其它方向哪个更有前景一点,就说说Linux运维,可以做些什么,有哪些方向. 1,运维,基本要掌握的有,操作系统,计算机原理,编译原理,计算机网络 ...

  7. Linux运维工程师前景

    什么是Linux运维 如果我们是一辆高速行驶在高速公路上的汽车,那运维工程师就是司机兼维修工,这个司机可不简单,有时需要在高速行驶过程中更换轮胎.并根据道路情况换档位.当汽车速度越来越快时,汽车本身不 ...

  8. Linux运维工程师岗位前景及学习路线

    Linux运维工程师岗位前景及学习路线 1.1 什么是Linux? 大家日常使用电脑听歌.打游戏娱乐或处理日常工作时,接触到最多的就是Windows操作系统,电脑如果不安装Windows系统是无法进行 ...

  9. linux运维前景2018,Linux运维工程师为什么越来越受企业重视?

    Linux运维工程师发展前景如何?它是一个新颖岗位现在非常吃香. 1 从行业角度分析 目前从行业的角度分析,随着国内软件行业不断发展壮大,越来越多复杂系统应运而生,为了保证系统稳定运行,必须要有足够多 ...

  10. linux运维工程师培训课程_Linux运维工程师工作内容总结!

    1.1 Linux运维的主要工作内容 1.什么是linux运维 运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常. 在他运转的过程中,对他进行维护,他集合了网络.系统.数 ...

最新文章

  1. 第五周周记(国庆第五天)
  2. 模板 - 计算几何相关公式大全
  3. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)
  4. java线程----生产者和消费者问题
  5. python字典统计_python字典计数
  6. 使用BeetleX构建基础的SSL网络通讯
  7. pat 甲级 1072. Gas Station (30)
  8. 【原创】Java实现手机号码归属地查询
  9. 接口文档下的渗透测试(Swagger)
  10. ASP.NET Core中返回 json 数据首字母大小写问题
  11. DPDK- flow Metering
  12. LRU算法(有彩蛋)
  13. Excel怎么在指定文本后面插入短横线符号
  14. oracle 判断条件不在某一时间范围内(not between)
  15. 什么叫Jour-fix
  16. 仿win10系统UI界面纯html网页网站后台UI界面
  17. 刷APP任务平台可靠吗?
  18. Chrome 内置翻译翻译失败解决
  19. uboot网络加载linux,DM8148 uboot 网络正常,Linux 起来后网络不通
  20. 计算机毕业设计Java联想搜索爬虫设计

热门文章

  1. 基于javaweb+jsp的晚会抽奖系统(java+Jdbc+Servlet+Ajax+mysql)
  2. 用友数据库最新会计期间_用友U8数据库维护常用表
  3. 基于p110δ晶体结构发现一种全新的具有高度选择性的PI3Kδ抑制剂的研究
  4. response.sendRedirect()的用法
  5. M2BEV:采用统一BEV表征的多摄像头联合3D检测分割
  6. MVC下压缩输入的HTML内容
  7. turtlebot运动控制问题(不用键盘控制,自己写控制节点控制地盘)
  8. go语言中的try、catch、throw实现
  9. HTML5期末大作业:旅游网站设计——中国风的旅游网站(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码...
  10. 【Mybatis学习路线】day02mybatis的增删改查操作