Linux生产环境下---问题指标面试
Posted 茴香_罐头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux生产环境下---问题指标面试相关的知识,希望对你有一定的参考价值。
生产环境问题排查
- 1.生产环境CPU 飙高的产生原因有哪些?
- 2. Arthas工具如何排查Linux环境下CPU飙高的问题?
- 3. jvisualVM 工具如何排查Linux环境下CPU飙高的问题?
- 4. 生产环境下内存泄漏的产生原因?
- 5. Arthas工具 如何排查Linux环境下内存泄漏的问题?
- 6. 生产环境遇到了报错?你是如何定位解决的呢?
- 7. 生产环境服务器宕机,如何解决呢?
- 8. 调用接口的时候,如果服务器端一直没有及时响应 怎么解决?
- 9.服务正在发布中?如何不影响用户使用?
- 10.你在开发过程中,遇到哪些难题?你是怎么解决的呢?
- 11. 谈谈你们公司日志是如何收集的?
- 12. 聊一聊前端到后端整体流程是怎样的?
1.生产环境CPU 飙高的产生原因有哪些?
- CAS 自旋一直重试导致 cpu 飙高 没有控制自旋次数;乐观锁
- 死循环;
- 阿里云 Redis 被注入挖矿程序,建议 Redis 端口不要能够被外网访问;
- 服务器被 DDOS 工具导致 cpu 飙高,可以通过限流、ip 黑名单、图形验证码防止机器模拟攻击;
2. Arthas工具如何排查Linux环境下CPU飙高的问题?
- Arthas 下载
https://github.com/alibaba/arthas/releases
-
Linux 服务器上运行 命令: java -jar arthas-boot.jar
-
thread -n 3 (列出线程前三)
3. jvisualVM 工具如何排查Linux环境下CPU飙高的问题?
本地远程连接—》查看
4. 生产环境下内存泄漏的产生原因?
什么是内存泄漏?
-
说法一: 对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。
-
说法二: 是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
内存泄漏发生的案例:
- ThreadLocal 内存泄漏问题
- HashMap 自定义 key 避免内存泄漏问题
通过以上案例排查内存泄漏问题。
查找到 java 虚拟机 哪些对象占用空间最大 前 20 个 列出分析
5. Arthas工具 如何排查Linux环境下内存泄漏的问题?
6. 生产环境遇到了报错?你是如何定位解决的呢?
- 传统的方式 在生产环境中遇到报错问题,我们是通过搜索日志的方式,排查
具体的错误。适合于服务器端 是单机或者少量集群的节点
Tail -200f - 采用 aop 形式拦截系统错误日志,在将这些错误日志调用微信公众号接口 主
动告诉给我们的开发人员
生产环境发生了故障。 - 我们公司采用 apm 系统 skywalking ,监控整个微服务 如果服务在一段时间
内发生了故障或者报错 会主动调用微信模板接口通知给开发人员 生产环境发
生了故障。在通过 skywalking 追踪 链可以直接查看到具体的错误信息内容.
7. 生产环境服务器宕机,如何解决呢?
-
我们公司生产环境,会对我们服务器 实现多个节点集群,如果某台服务器
发生了宕机 会自动实现故障转移,保证服务的高可用。 -
如果服务器宕机 我们可以在服务器上安装 keepalived 监听 java 进程,如果该
java 进程发生了宕机 会自动尝试重启该 java 进程,这是属于软件层面。如果是
物理机器比如关机了,可以使用硬件方式自动重启服务器 例如向日葵. -
如果服务器发生了宕机,尝试重启 n 多次还是失败,我们可以使用容器快速动
态的实现扩容(docker 或者 k8s)k8s -
重启该服务,如果重启多次还是失败 则会发送短信模板的形式通知给运维人
员。
注意:千万不要回答 直接重启服务器端。
物理机器关机----tomcat 服务器宕机
8. 调用接口的时候,如果服务器端一直没有及时响应 怎么解决?
Ddd 服务网格 云原生
1.如果调用接口发生了响应延迟:是因为我们 http 请求是采用同步的形式,基于
请求与响应模型如果服务器端没有及时响应给客户端,客户端就会认为接口超
时,接口发生了超时客户端会不断重试 ,重试的过程中 会导致 幂等性问题
幂等性问题(需要保证业务唯一性。)
例如:服务器端 调用网络连接(调用征信接口、发送短信、连接 mysql、redis)
2.如果接口响应非常慢,就需要对代码做优化例如 加上缓存减轻 db 查询压力、
减少 GC 回收频率
3.如果接口代码在怎么优化 就是执行非常耗时时间,因为采用 mq 异步的形式
不能够使用 同步形式。
举例子:接口代码里面 需要调用非常多接口 在响应客户端
9.服务正在发布中?如何不影响用户使用?
服务正在发布中,该 jar 中正在启动… 客户端访问的时候,一直阻塞等待。
1.使用 nginx 故障转移即可。
2.灰度发布 先发布一小部分 如果没有问题 在让所有用户都可以访问。
灰度发布 nginx+nacos gateway+nacos(推荐) 或者是 k8s 实现。
10.你在开发过程中,遇到哪些难题?你是怎么解决的呢?
如果在面试的过程中被面试官问到:你在开发过程中,遇到哪些难题?
不要答:空指针异常、常见错误异常。
遇到问题→你是如何分析的?→如何排查的?→最终是怎么解决的?
1.分布式事务
2.分布式幂等
例如 我们公司提供了一个接口,被其他公司进行调用。
他的公司在调用我们公司接口的过程中,我们的接口响应超时了,
最终触发了客户端重试了,重试的过程当中请求的参数都是相同的,导致我们接
口会重复执行业务逻辑。
解决办法: 全局 id 业务上防重复、 在 db 层面去重复 例如 创建唯一约束
3.定时任务调度
例如:我们项目在生产环境中做定时任务,如果集群的情况下 定时任务重复执
行。 解决该问题
1.在打 jar 包的时候 加上一个开关 只让一个 jar 包执行定时任务
2.整合分布式任务调度平台 xxljob 最终分片执行 定时任务集群的执行
定时任务 1 【】跑批 1-10 万 定时任务 2 11-20 万
4.数据同步延迟问题
我们公司 使用 canal 解决 mysql 与 redis+kafka 数据同步问题
发现就是在并发的情况下同步非常延迟,我们整合 kafka 分区模型
根据每张表都有自己独立的 topic 主题,每个 topic 主题有自己独立
分区 每个分区有自己独立消费者 ,解决消息顺序一致性问题。
6. 安全性问题
7. 生产环境发生 cpu 飙高、内存泄漏
8. 因为我们的项目前后端分离 跨域的问题
…真实业务场景当中遇到难题
11. 谈谈你们公司日志是如何收集的?
生产环境无法连接,
- 传统方案,将日志写到页面,从页面下载本地查看
- 分布式日志解决方案,考虑效率问题
ELK + kafka :
E ElasticSeach (存储日志信息)
L LogStatus(搬运工)
K kibana 连接到我们ElasticSeach图形化界面查询日志
kafka 消息队列
通过AOP 面向切面编程,进行拦截读取,(前置通知、业务处理、后置通知、异常通知) ----> 将同步的流程操作,改为 异步的操作,提高效率。
将日志消息存入redis , 让 kafka 生产消息, 让消费者消费消息, 让logStatus收集日志输入,json 格式 数据输出 到 ES服务器中,kibana 读取ES 展示日志内容。
12. 聊一聊前端到后端整体流程是怎样的?
架构模式:
-
在微服务架构模式中,提倡专业的人去做专业的事情。
前后端分离,前端由前端工程师来实现,后端由后端工程师来实现。 -
后端开发者需要编写api 接口文档 Swagger 能够方便前端工程师测试联调。
误区:
动静分离: 是指动态资源(Servlet、接口) 静态资源(images、css 、 js)走CDN 的。
前后端分离: 是一种开发模式, 前端和后端拆分,解耦。
请求模式: -
为了保证接口安全, 整合ddos 高防服务器(阿里云、华为云),防止接口被攻击(黑名单、白名单、图形验证码)
-
网关: 可以对接口限流之类的( 服务保护、服务熔断、降级、 隔离) 配置接口跨域问题。
-
路由策略: 采用动态路由策略。
-
如果我们接口是开放接口,构建api 接口开放平台 、 支付宝、美团、微信 申请商户对应的秘钥、 获取token 调用接口。。
以上是关于Linux生产环境下---问题指标面试的主要内容,如果未能解决你的问题,请参考以下文章