加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 交互 > 正文

运维面试必会题目

发布时间:2020-12-24 23:29:22 所属栏目:交互 来源:网络整理
导读:副标题#e# 1、如何实现 Nginx 代理的节点访问日志记录客户的 IP 而不是代理的 IP? 在nginx代理文件中怎加一行配置文件:proxy_set_header X-Real-IP$remote_addr; 2./var/log/messages 日志出现 kernel: nf_conntrack: table full, dropping packet.请问是
副标题[/!--empirenews.page--]

1、如何实现 Nginx 代理的节点访问日志记录客户的 IP 而不是代理的 IP?

在nginx代理文件中怎加一行配置文件:proxy_set_header  X-Real-IP $remote_addr;

2./var/log/messages 日志出现 kernel: nf_conntrack: table full, dropping packet.请问是什么原因

导致的?如何解决?

  这是iptables的报错信息“连接跟踪表已满,开始丢包”,再想到网站那面将memcached的连接改为短连接,由于iptables会记录每个连接的跟踪信息,而连接关闭关闭过于频繁导致连接跟踪表满,出现丢包。

解决方法:

首先将memcached的连接方法改为长链接,然后再针对nf_conntrack进行修改,主要有以下几种方式:

1.关闭防火墙

 2.加大iptables跟踪表大小,调整对应的系统参数

3.使用裸表,不添加跟踪标志

4.删除连接跟踪模块

3.linux 系统 nginx php 环境,发现 PHP-FPM 进程占用 CPU 高,请问可能的原因,以及如

何解决?

 一、进程跟踪

# top //找出CPU使用率高的进程PID

# strace -p PID //跟踪进程

# ll /proc/PID/fd //查看该进程在处理哪些文件

将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间。

二、内存分配

如果进程跟踪无法找到问题所在,再从系统方面找原因,会不会有可能内存不够用?据说一个较为干净的PHP-CGI打开大概20M-30M左右的内存,决定于PHP模块开启多少。

通过pmap指令查看PHP-CGI进程的内存使用情况

# pmap $(pgrep php-cgi |head -1)

按输出的结果,结合系统的内存大小,配置PHP-CGI的进程数(max_children)。

三、监控

最后,还可以通过监控与自动恢复的脚本保证服务的正常运转。下面是我用到的一些脚本:

只要一个php-cgi进程占用的内存超过 %1 就把它kill掉

#!/bin/sh

PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’`

for PID in $PIDS

do

echo `date +%F….%T`>>/data/logs/phpkill.log

echo $PID >> /data/logs/phpkill.log

kill -9 $PID

done

 

检测php-fpm进程

#!/bin/bash

netstat -tnlp | grep “php-cgi” >> /dev/null #2&> /data/logs/php_fasle.log

if [ "$?" -eq "1" ];then #&& [ `netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}'` -eq "1" ];then

/usr/local/webserver/php/sbin/php-fpm start

echo `date +%F….%T` “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log

fi

通过http检测php执行

#!/bin/bash

status=`curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’`

if [ $status != "200" -a $status != "304" ]; then

/usr/local/webserver/php/sbin/php-fpm restart

echo `date +%F….%T` “php-fpm service restart” >> /data/logs/php_monitor.log

fi

4.一主多从,主库宕机,如何切换到从库,其他的从库如何处理?

1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread; show processlist;直到看到Has read all relay log,则表示从库更新都执行完毕了

2.登陆所有从库,查看master.info文件,对比选择pos最大的作为新的主库。

3.登陆192.168.1.102,执行stop slave; 并进入数据库目录,删除master.info和relay-log.info文件, 配置my.cnf文件,开启log-bin,如果有log-slaves-updates和read-only则要注释掉,执行reset master

4.创建用于同步的用户并授权slave,同第五大步骤

5.登录另外一台从库,执行stop slave停止同步

6.根据第七大步骤连接到新的主库

7.执行start slave;

8.修改新的master数据,测试slave是否同步更新

5.误操作 drop 语句导致数据破坏,请给出恢复思想及实际步骤。

 

思想:

 

    法1:  1、通过防火墙禁止web等应用向主库写数据或者锁表,让数据库停止更新。

 

                  ##检查全备及binlog日志 ;

 

           2、将全备恢复;

 

              mysqlbinlog -d databasename mysql-bin.000014 > bin.sql

 

           3、将所有binlog汇总,转成sql语句,剔除drop语句,恢复数据;

 

              mysql -uroot -p123456 databasename < bin.sql

 

              (注意数据的备份,不要破坏原始数据)

 

           4、后续:(数据无法写入)所以无需恢复。

 

              5、如果是update语句(也需要停止访问)

 

    法2:1、如果主库持续有数据写入;

 

         2、停止一个从库;然后在主库刷新binlog;

 

          3、把mysql-bin.000014恢复成bin.sql(去掉drop语句);

 

          4、把全备数据sql及操作前的增量bin.sql恢复到从库。

 

          5、停止主库;把主库刷新后的binlog解析为sql恢复到从库;

 

          5、切换为从库提供服务;

 

          #法2可能会有主键冲突等其它的问题,可以通过修改id或者延迟解决,尽量使用法1停库解决;

 

         #平时工作要注意数据库的权限管理及流程管理,防患于未然。

6.请举一个生产中实际的例子网站打开慢由于数据库慢导致的。

 数 据库负载高,有慢查询,做联合索引案例

 

数据库负载高,有慢查询,分析web日志,可能有爬虫,封其ip

7.  通过 kill -9 野蛮粗鲁杀死数据库导致数据库启动故障,给出排除方法或者经验。

  暂时没有答案:

8.IDC 机房带宽突然从平时 100M 增加到 400M,请你分析问题所在,并解决。

.真实遭受DDOS攻击(遇到过几次,造成影响的不多见,其中还有黑客勒索的案例)。

 b.内部服务器中毒,大量外发流量(这个问题老男孩接警5次以上)

 c.网站元素(如图片)被盗连,在门户页面被推广导致大量流量产生(接警3次以上)

 d.合作公司来抓数据,如:对合作单位提供了API数据接口(有合作的公司的朋友了解这个)

 e.购买了CDN业务,CDN猛抓源站(这个次数也不少)。

9.正在工作的 linux,发现文件系统只读了,你觉得导致问题的原因是什么,如何解决?

1、重启看是否可以修复(很多机器可以)

2、使用用 fsck – y /dev/hdc6 (/dev/hdc6指你需要修复的分区) 来修复文件系统

3、若,在进行修复的时候有的分区会报错,重新启动系统问题依旧

查看下分区结构

[root@localhost ~]# mount

/dev/sda3 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/sda1 on /boot type ext3 (ro)

tmpfs on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

查看ro挂载的分区,如果发现有ro,就重新mount

umount /dev/sda1

mount /dev/sda1 /boot

如果发现有提示“device is busy”,找到是什么进程使得他busy

fuser -m /boot 将会显示使用这个模块的pid

fuser -mk /boot 将会直接kill那个pid

然后重新mount即可。

4、直接remount,命令为

[root@localhost ~]# mount -o rw,remount /boot

10.磁盘报错“No space left on device”,但是 df -h 查看磁盘空间没满,请问为什么?

 

1.1首先查看我们的磁盘剩余情况

 

[root@admin /]# df -h                 #发现磁盘没有满  还有%47

 

Filesystem      Size  Used Avail Use% Mounted on

 

/dev/sda3       6.9G  3.1G 3.5G  47% /

 

tmpfs           491M     0 491M   0% /dev/shm

 

/dev/sda1       190M   33M 147M  19% /boot

 1.2 创建目录测试报错 

 #创建目录报错文件还是正常

[root@admin/]# mkdir test

 mkdir: cannot create directory `test': No space left on device

 

#查看磁盘inode

 

[root@admin/]# df -i

 

Filesystem     Inodes IUsed  IFree IUse% Mounted on

 

/dev/sda3      462384 462384      0 100% /

 

tmpfs          125517      1 125516    1% /dev/shm

 

/dev/sda1       51200     38 51162    1% /boot

 

#最后发现目录backup中inode   满了

 

[root@admin/]# df -i /backup/

 

Filesystem     Inodes IUsed IFree IUse% Mounted on

 

/dev/sda3      462384462384     0  100% /

 

1.3解决方案 

#删除backup目录中不常用的文件数据

 

#由于本文是测试inode满 所以删除所有数据,工作中要注意汇报上级。

 

[root@admin /]# rm -rf /backup/   

 

#公司解决方案

 

删除/backup目录中的部分文件,释放出/backup分区的一部分inode,特别要留意那些spool出来的文件,这种文件一般会占用比较多的节点,因为比较小而且零碎,同时要多留意日志文件信息等

 

2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/backup分区inode不足的问题:

 

ln-s /opt/newcache /data/cache

 

3、更换服务器,用高配置的服务器替换低配置的服务器。很多时候用钱去解决问题比用技术更有效,堆在我办公桌上5台全新的DELL PowerEdge 1950 服务器即将运往IDC机房。一般不建议

 

 1.4检查inode

 

Filesystem     InodesIUsed  IFree IUse% Mounted on

 

/dev/sda3      462384 59141403243   13% /

 

tmpfs          125517     1 125516   1% /dev/shm

 

/dev/sda1       51200    38 51162    1% /boot

11、磁盘空间满了,删除了一部分 nginx access 日志,但是,发现磁盘空间还是满的,请问

为什么?

删除的日志信息,一部分可能还是被进程调用,因此,需要重启nginx服务来释放进程;

或者实际生产环境中使用&amp;gt;/log/access.log清空文件

 12.请利用 shell 开发一个 rsync 服务的启动停止脚本并通过 chkconfig 进行开关机管理

 

root@sky9896 /]# chkconfig --add rsyncd 

rsyncd 服务不支持 chkconfig

[root@sky9896 /]# cat /etc/init.d/rsyncd 

#/bin/bash

# chkconfig: 2345 20 80    #添加该条即解决服务支持chkconfig

 

[root@sky9896 /]# chkconfig --add rsyncd

[root@sky9896 /]# chkconfig --list rsyncd

rsyncd          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

 

[root@sky9896 /]# /etc/init.d/rsyncd start  

-bash: /etc/init.d/rsyncd: 权限不够

 

[root@sky9896 /]# chmod 777 /etc/init.d/rsyncd   #授权后,即解决

[root@sky9896 /]#  /etc/init.d/rsyncd start    #启动服务 

rsyncd is started.

[root@sky9896 /]# netstat -lnt|grep 873    

tcp        0      0 0.0.0.0:873           0.0.0.0:*        LISTEN      

tcp        0      0 :::873         

 

设置开机自启动的过程:

[root@sky9896 /]# chkconfig --add rsyncd  #添加服务

[root@sky9896 /]# chkconfig --list rsyncd  #显示服务

rsyncd  0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@sky9896 /]# chkconfig --del rsyncd  #删除该服务

[root@sky9896 /]# chkconfig --list rsyncd

rsyncd 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig --add rsyncd”)

13.写一个 tomcat 启动脚本,手工 OK,但是放入定时任务就是不执行,请问为什么?

最近遇到了一些sh不能在crontab定时任务中自动执行的问题

期间由于不太了解,故走了一点弯路,现在总结下来可能第一次

进行设置遇到的问题。以绝后患!我所用过的操作系统为HP-unix&linux&sco-unix,均测试通过

1,首先确保sh脚本具有可执行属性

即chmod +x  ***.sh

或chmod +777 ***.sh

2,确保sh脚本手工执行正常

即在当前系统内手工执行sh脚本以后能收到自己期望得到的结果

3,加载环境变量

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读