生产中遇到的一些问题

一、在linux中大致分为两种一种是【标准输出】,另一种为【标准错误】,应用中的区别可以理解为,【标准错误】不能使用文本处理命令,如grep sed awk等
实例:nginx -V,输出结果保存在文本中,nginx -V 2> /tmp/nginx.info中

二、优化Nginx服务的worker进程个数小于cpu核数,
例如一台2颗物理CPU 每个CPU的核数为4核 ;计算结果就是8*2 =16 (为worker_processes XX)
worker_connections 24576;**24核乘以每核可承载1024连接数
但为了防止nginx将cpu吃满,会保留一部分CPU空间
如:2颗cpu,每个cpu核数为4核,计算为8核
8核cpu,开启6个进程
worker_processes 6;
worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100;
worker_connections 6x1024;

三、tomcat中JVM查看内存溢出
在catalina.out中是不显示具体的io线程
内存溢出后排查分析:
1、通过命令查看对应的进程号 比如:jps 或者 ps -ef | grep servicemix
2、输入命令查看gc情况 命令:jstat -gcutil 进程号 刷新的毫秒数 展示的记录数
比如:jstat -gcutil 14050 1000 10 (查看进程号14050,每隔1秒获取下,展示10条记录)
3、查看具体占用情况:
(1)命令: jmap -histo 进程号 | more (默认展示到控制台)
(2)命令: jmap -histo 14050 | more > exceptionlog.txt (输出到当前目录的exceptionlog.txt文件)
比如:jmap -histo 14050 | more 查看具体的classname,是否有开发人员的类,也可以输出到具体文件分析

四、jenkins上传war到tomcat时,需要重启tomcat,才能触发tomcat自动解压,或者进行reload ,再或者在server.xml下进行配置自动加载

五、查看MySQL的线程运行情况
1.使用top命令查看cpu使用率
2.使用管理员用户运行命令:
mysql> show [full] processlist; # full是可选的,如果不加,默认只显示前100条结果。
【可以靠这个结果来分析一些诸如用户连接状况之类的信息。譬如我当初用Navicat去连公司的远程数据库服务器,出现如下报错:
Lost connection to MySQL server at ‘waiting for initial communication packet’, system error: 0
经查阅资料,发现在以IP地址连接MySQL时,MySQL默认会通过该地址去解析访问者的主机名。如果没有配置DNS等服务,就会在不断尝试解析的过程中超时,造成上面的错误。简单的解决办法是在MySQL服务器的 /etc/hosts 中添加一条访问者的 IP<>主机名 映射,这样就能正确解析出主机名,完成数据库连接。
只是我公司的内网环境复杂,在没有网管人员协助的情况下,难以定位最终的访问IP。这时就可以通过 show [full] processlist; 实时追踪线程来分析出正确的IP地址。】
可以看到具体的SQL语句执行耗费了较长时间。
1)优化sql语句,做索引
2)做缓存
3.修改mysql配置文件中的pool/buffer等数值
4.使用explain分析SQL语句
【主select对上万条记录使用filesort进行了排序,这是造成查询速度慢的原因。然后多个并发的查询使CPU专用很高。】
5.优化
1)缩减查询范围
2)发现有一定效果,但效果不明显,原因是每条记录都要做一次DATEDIFF运算
3)查询速度大幅提高。在PHP中,日期阈值通过计算得到
或者:注释掉sql查询语句



mysql IO线程 100%的实例分析【写入IOPS很高】
分析过程:
1、通过iotop工具可以看到当前IO消耗最高的mysql线程
2、查看具体的线程【49342】的堆栈,可以看到正在进行redo log的刷新,对应的是9号文件
3、9号文件对应的是redo log的第一个文件
为什么mysql进程会频繁的刷新redo log文件,要结合redolog的刷盘策略来分析,关键是innodb_flush_log_at_trx_commit参数,
默认是1,最安全,但在写压力大的情况下,也会带来较大的性能影响,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。
结合这个集群的写入场景来看,大部分都是小事务的写入,每次事务提交都会触发刷盘动作,这种场景下通过增大innodb_log_buffer_size和innodb_log_file_size的优化效果不明显
【优化方案】
1、应用层面,对于写压力大的系统,可以将单条的insert语句优化为小批量的insert语句,这样事务commit的次数减少,redo log刷盘减少,性能理论上会有提升
2、MySQL层面,对于日志类型的系统,如果允许宕机的情况下少量数据丢失,可以将innodb_flush_log_at_trx_commit参数调整为2,
当设置为2时,则在事务提交时只做write操作,只保证写到系统的page cache,因此实例crash不会丢失事务,但宕机则可能丢失事务
在这台服务器上测试,将参数调整为2时,IO的请求从200M/S降到约10M/S压力会减少10倍以上
3、系统层面,更换性能更佳的磁盘

六、redis哨兵模式所用到的协议
用流言协议(gossip protocols)来接收关于Master是否下线的信息,并使用投票协议【共识协议】(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。

七、生产环境中重启nginx命令,reload【加载】

八、LVM:VG–》PV----》LV,文件系统相同的才可以做lvm

九、egrep和grep的区别:一个支持扩展正则,一个不支持

十、redis和mysql的区别:非关系型和关系型,
非关系型:一般以key的形式存储在内存中
关系型:一般以表格的形式存在硬盘中,
Innodb引擎:支持事务【原子性,隔离性,一致性,持久性】,主外键,缓存真实数据
MyISAM引擎:不支持事务,不支持主外键,不缓存真实数据

十一、nginx 80转443端口:rewrite ^(.*)$ https://${server_name}$1 permanent;

十二、zabbix自带的基础监控的模板中只有对单核cpu负载1分钟、5分钟、15分钟的监控。
添加对总的cpu负载的监控
key:system.cpu.load[all,avg1] 1分钟cpu总的负载
自动发现主机一般不在生产环境上使用,还有jenkins上线时一般也是一个一个上线
报警信息
主机: node1
时间: 2019.08.07 12:07:12
级别: High
触发: none-nginx-status
详情: nginx-status:web.page.perf[192.168.65.129,index.html,80]:0.000444
状态: OK
项目:web.page.perf[192.168.65.129,index.html,80]
事件ID:1514

十三、keepalive有三个条件可以触发主备切换:
1、停keepalived服务时发生切换;
2、如果是双网卡,停掉其中一块网卡发生切换:
track_interface {
eth0
eth1
}
3、http,ftp,mysql 等应用程序中如查应用程序出现故障时,可以用 vrrp_script 来监控集群资源

十四、iptables时监控流量比如80端口
统计数据包
iptables -nvL |grep -E ‘(dpt|spt):80$’
0 0 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp spt:80
流量过大的时候
增加带宽,增加机器
为啥是0.0.0.0/0 0.0.0.0/0?
因为是自定义链,查看自定义链就有具体的规则 【iptables -S 查看编写规则的源命令】

十五、k8s集群扩容master节点?
master扩容需要解决方案,扩容达到个数必须单数个(1.3.5.7…),一般都用keepalived加haproxy作为前端调度,还需要导出kubeinitconfig文件做修改再添加
服务起来之后,容器就退出了?
加一个不以守护进程方式运行的参数
节点出现notready时
首先用kubectl describe 查看容器日志
1.防火墙 安全策略
2.node组件问题
3.认证信息问题

十六、session问题是怎么解决的?
ip_hash:可以实现会话保持,将同一客户的IP调度到同一样后端服务器,可以解决session的问题,不能使用weight
做session共享,不然再次点击网页会发生跳转,数据丢失,重新输入

十七、tomcat有4台,那你filebeat有几台呢?一般用的时候需要修改filebeat配置或者直接用logstash修改配置
tomcat filebeat logsach 是一个用户吗?没有特别的权限设置不是一个
filebeat多久抓取一次?默认的10秒
filebeat占用cpu过大时,合理的配置日志文件的匹配规则,限制单行日志大小,根据实际情况配置memqueue缓存的个数,才能在实际使用中规避filebeat的内存占用过大的问题。【在容器中遇到的问题较多】

十八、ELK压力过大时,
logstash优化:
pipeline 线程数小于CPU内核数
output 线程数小于pipeline线程数
1)定期清理索引
2)优化各个组件

十九、物理机8G JVM 不超过物理内存的一半
物理机 6核 32G 1T 做虚拟机

二十、数据库:双主(AB)的情况下,当连续的数据存到A库,受到网络问题,A库的数据并没有同步到B库中,连续的数据没有继续存到A库,而是直接存到了B库,导致了数据不同步
待答…
主从延迟问题

二十一、灰度发布是如何做划分的,用户?地域?

二十二、ELK kafka的作用,做存储,做削峰,做耦合

二十三、keepalived数据丢失问题【数据库高可用容灾】
解决方法
1 人工修复这部分数据,数量多的话重做主从
2 将sync_binlog改为1,杜绝这个情况再次发生
设置sync_binlog=1,多个事务同时提交,同样很大的影响MySQL和IO性能 安全性高,但消耗性能

二十四、linux磁盘满了处理方式
1.确认是否真的是磁盘空间不足
df -ih 查看磁盘信息
删除占用空间大,且无用的文件(日志)
2.定位最大文件目录
在/下执行du -h max-depth=1 寻找当前目录,哪个文件夹占用空间最大
3.定位最大文件
ls –lhS 将文件以从大到小顺序展现
4.确认文件未被占用(进程被占用时,删除无效,只有杀掉进程才可以被释放)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值