1,Linux服务器运行中会在哪些地方产生瓶颈?如何测试这些瓶颈php
磁盘i/o,用dd命令能够简单测试磁盘读写速度,也能够用vmstat 1命令査看wa列是否很高 査看cpu负载的命令及用法,要考虑系统有多个cpu的状况 top査看cpu的状况,top回车后按1能够査看到全部cpu的使用状况• 査看磁盘负载,内存使用的命令: 使用iotop命令能够査看进程对磁盘的读写速度 free -m命令能够査看内存的使用,咱们须要看第二行的free列 vmstat 1命令能够査看系统的瓶颈点,当内存不足时,则swpd列会有较大的数值,而且在不断增长,同时si so两列的数值也在不断变化,若是磁盘有负载,wa列数值会偏高.
2,如何记录一个前台执行的非守护进程的执行时间,程序执行的时间会分为几个部分node
time command ;程序执行时间会分为三部分,一个是real time,一个是user —个是sys 1) real是时钟时间-程序从开始至结束的总时间,他包括期间其余进程所占用的时间片和进程被阻塞的时间(如10等待的时间〉 2) user被测试程序在用户棋式下所花的CPU时间,他是进程执行的正真的CPU时间.其余进程调度的时间片以及阻塞(如10)的时间不包含在内 3) sys是进程在内核中所花费的CPU时间。他表示进程在内核调用中所花的CPU时间,而程序的库调用仍然运行在用户空间下user+sys表示程序所执行的CPU时间(不包括10以及其余进程的CPU时间).
3,什么是守护进程mysql
守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端而且周期性的执行某种任务或等待处理某些发生的事件。因为在linux中,每一个系统与用户进行交流的界面称为终端,每个今后终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。可是守护进程却能突破这种限制,它脱离于终端而且在后台运行,而且它脱离终端的目的是为了不进程在运行的过程当中的信息在任何终端中显示而且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
4,经常使用的网络连通性测试工具为ping和traceroutelinux
1) ping:网络上的机器都有惟一肯定的IP地址,咱们给目标IP地址发送一个数据包,对方就要返回一个一样大小的数据包,根据返回的数据包咱们能够肯定目标主机的存在,能够初步判断目标主机的操做系统等。 2) traceroute: traceroute 是利用ICMP 及IP 头部的TTL。首先,traceroute 送出一个TTL 是1的IP数据包(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器收到IP数据包时,将TTL减1»此时,TTL变为0,因此将该路由器会将此IP数据包丢掉,并返回一个ICMP数据包(包括发IP 包的源地址,IP包的全部内容及路由器的IP地址),当traceroute收到这个消息后,接着继续发生TTL为2的IP数据包给第二个路由器。以此类推,直到IP数据包达到最后一台路由器时,会返回一个ICMP echo reply的数据包
Linux如何挂载windows下的共享目录? mount.cifs /IP地址/server/ /mnt/server -O user=administrator password=yourpasswd 查看http的并发请求数与其TCP链接状态 netstat -ant |awk '{print $5}' |awk -F ":" '{s[$1]++}END{for(i in s){print s[i],i}}' |sort -rn | ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024 vim /etc/security/linits.conf * soft nofile 102400 * hard nofile 102400 重启生效 tcpdump嗅探80端口的访问看看谁最高 tcpdump -i eth0 port 80 -nn -c 100 | awk -F"." '{print $1"."$2"."$3"."$4"."}'|sort |uniq -c | sort -nr | head -5 (未测试) 查看/var/log目录下的文件数 find /var/log ! -type d -ls | wc -l ls /var/log/ -lR |grep "^-" |wc -l (这个比较好 ,应该加R) 查看Linux系统每一个ip的链接数: netstat -tan |awk 'NR> 2 {print $5}' |awk -F : '{c[$1]++}END{for(i in c ){print c[i],i}}' |sort -rn (不是很满意,意思差很少) 随机生成32 位密码 date +%F |sha256sum | base64 | head -c10 ;echo < /dev/urandom tr -dc a-z | head -c10 ;echo (全小写) openssl rand -base64 32 apache access.log 访问最多的5个IP awk '{c[$1]}END{for (i in c)END{print c[i]},i }' |awk -nr | heard -5 cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -n -r | head -5 通常经过hexdump命令 来查看二进制文件的内容。 hexdump -C XXX(文件名) -C是参数 不一样的参数有不一样的意义 -C 是比较规范的 十六进制和ASCII码显示 -c 是单字节字符显示 -b 单字节八进制显示 -o 是双字节八进制显示 -d 是双字节十进制显示 -x 是双字节十六进制显示 ps aux 中的VSZ表明什么意思,RSS表明什么意思? VSZ:虚拟内存集,进程占用的虚拟内存空间 RSS:物理内存集,进程占用实际物理内存空间 修复检测/dev/hda3 fsck用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查 简单的linux 开机启动顺序 BIOS------>MBR------>GRUB----->内核(内核文件系统)-----第一个进程-------inittab ------内核模块----系统环境启动脚本----执行/etc/rc.local------/bin/log/ ----/bin/bash 符号链接与硬链接的区别: 保存当前磁盘分区的分区表 dd 命令是以个强大的命令,在复制的同时进行转换 dd if=/dev/sda of=./mbr.txt bs=1 count=512 手动 grub grub-install /dev/sda 修改内参数 vim /etc/sysctl.conf sysctl -p apache 限制每秒链接数 iptables -A INPUT -p tcp --port 80 -m limit --limit 1/second -j ACCEPT (大概这意思) FTP协议有两种工做方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请 求,服务器接受链接,创建一条命令链路。当须要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来链接我”。 因而服务器从20端口向客户端的 XX端口发送链接请求,创建一条数据链路来传送数据。 PASV(被动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请 求,服务器接受链接,创建一条命令链路。当须要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来链接我”。 因而客户端向服务器的XX端口 发送链接请求,创建一条数据链路来传送数据。 显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,然后又跟了任意非空白字符的行 grep -E "^#[[:blank:]]+[^[:blank:]]+" 显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行 grep "\:[0-9]\{1\}:" a.txt 批量添加20 个用户 for i in `swq -w 01 20 ` ; do if [ ! ` id i `] ; then passwd=`<dev/urandom tr -dc a-z | head -c 5` useradd i && echo "user $i :passwd $passwd " && echo "$passwd" | passwd --stdin $i done 脚本判断ip 是否在线 for ip in `seq 1 254 ` do ping -c1 -w 1 ip.$ip &>/dev/null [ $?] && echo "ip is up " done 建立一个函数,能接受两个参数: 1)第一个参数为URL,便可下载的文件;第二个参数为目录,即下载后保存的位置; 2)若是用户给的目录不存在,则提示用户是否建立;若是建立就继续执行,不然,函数返回一个51的错误值给调用脚本; 3)若是给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;若是成功,则返回0给调用脚本,不然,返回52给调用脚本; #bin/bash url=$1 dir=$2 download(){ cd $dir &>/dev/null if [ $? -ne 0 ];then read -p "$dir No such file or directory,create?(y/n)" answer if [ "$answer" == "y" ];then mkdir -p $dir cd $dir wget $url &>/dev/null else return "51" fi else wget $url &>/dev/null fi if [ $? -ne 0 ];then return "52" fi } download history 显示 命令事件 HISTTIMEFORMAT=“%Y-%m-%d `whoami `” >> /etc/profile 生成32位随机密码 yum -y install expect mkpasswd -l 32 openssl rand -base64 8 | md5sum | cut -c1-32 伪随机数 openssl rand 用于产生指定长度个bytes的随机字符。-base64或-hex对随机字符串进行base64编码或用hex格式显示。 openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和数字的组合,3a61800e openssl rand -base64 8 | cksum | cut -c1-8 #八位数字,10784736 date +%s%N #生成19位数字,1287764807051101270 date +%s%N | cut -c6-13 #取八位数字,21793709 date +%s%N | md5sum | head -c 8 #八位字母和数字的组合,87022fda cat /dev/urandom | head -n 32 | md5sum | head -c 32 须要抓取ethl网卡上从127.10.32.5发到本机8080端口的数据包 tcpdump -nn -i eth1 port 8080 and host 127.xxxxx mv/tmp/filel /data/ (请简述这个命令操做的详细过程〉 1) 移动/tmp目录的filel文件到/data/目录,若是/data/存在同名文件会提示是否覆盖。 2) mv文件在同一个分区以内是执行的rename的操做,不会更改i节点的信息 该操做对inode表没有影响,对数据的位置也没有影响,不移动任何数据。只须要构造一个现有i节点的新目录项,并解除和旧目录项的连接。不论文件有多大,执行mv的时间都是“瞬间”完成。 netstat 发现大量的time-wait 客户端发送FIN 服务端接收一直到服务端发送FIN ,客户端发送ACK 后,客户端处于TIME-WAIT状态,须要停留2msl,目的: 1) 可靠地实现TCP全双工链接的终止 2) 容许老的重复分解在网络中消逝 首先解释第一条,在客户端接收到服务器端的FIN报文以后,会回复一个ACK,可是该ACI(报文 有可能会丢失,服务器就会从新发送FIN报文给客户端,因此为了处理可能出现的重发FIN报文,必须保持一段实现再推出(这是从服务器端考虑。怕服务器端接收不到ACK,而在必定时间后继续向客户端发送FIN包) 第二条缘由,假设客户端用相同的IP地址和端口号,再次链接相同的服务器的IP地址和端口号, 那么上一次的链接的报文可能在第二次链接中才发送到,为了不这种混淆,TIMEJ/VAIT等待2MSUMSL为单个报文在传递过程当中的生命期).保证上一次全部的报文都到达,或者在链路中被丢弃,才能够进行下一次链接.(从客户端考虑,客户端关闭后,当即有进程申请相同的ip和端口与服务器通讯,可是服务器端尚未释放以前的链接状态信息) Twemproxy是一种代理分片机制,由Twitter开源• Twemproxy做为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题.固然,Twemproxy自己也是单点,须要用Keepalived作高可用方案。经过Twemproxy可使用多台服务器来水平扩张redis服务,能够有效的避免单点故陣问題。虽然使用Twemproxy须要更多的硬件资源和在redis性能有必定的损失(twitter测试约20%),可是可以提升整个系统的HA也是至关划算的。不熟悉 twemproxy的同窗,若是玩过nginx反向代理或者mysql proxy,那么你确定也慊twemproxy 了•其实twemproxy不光实现了redis协议,还实现了memcached协议,什么意思?换句话说,twemproxy不光能够代理redis,还能够代理memcached* (没背) 在tomcat中,负贵链接客户端(能够是浏览器或web服务器)请求至servlet容器内的web应用程序的组件是C链接器(connector) 依据mysql binlog日志恢复截止到2016.1.110:01:15以前的数据(b丨nlog文件database-binlog.000992) /usr/local/mysql/bin/mysqlbinlog - stop-datetime=f 2016-1-110:01:15 */data/database-binlog.000992 | mysql - uroot -ppassword TCP: time wait bucket table overflow 引发该现象的缘由是服务器tcp的链接数太多,超出了内核 echo 20000 > /proc/sys/net/ipv4/tcp_max_tw_buckets 永久有效可以下 vim /etc/sysctl.conf net.ipv4.tcp_max_tw_buckets = 20000 # sysctl -p定义的最大数 netstat -an | grep 80| awk '{print $6}' | sort | uniq -c | sort -rn 可统计当前个链接的个数 故障表现: 一:系统日志频繁出现:kernel: TCP: time wait bucket table overflow 二:服务器链接中,有大量TIME_WAIT netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 5009 FIN_WAIT1 19 ESTABLISHED 3 FIN_WAIT2 2 SYN_RECV 14 CLOSING 146 LAST_ACK 1 解决方案: vi /etc/sysctl.conf 增长如下几行: net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 ##已经修改 说明: net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少许SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。容许将TIME-WAIT sockets从新用于新的TCP链接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP链接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout = 30 表示若是套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改成20分钟。 net.ipv4.ip_local_port_range = 1024 65000 表示用于向外链接的端口范围。缺省状况下很小:32768到61000,改成1024到65000。 net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,能够容纳更多等待链接的网络链接数。 net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,若是超过这个数字,TIME_WAIT套接字将马上被清除并打印警告信息。默认为180000,改 为5000。对于Apache、Nginx等服务器,上几行的参数能够很好地减小TIME_WAIT套接字数量,可是对于Squid,效果却不大。此项参 数能够控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。 执行如下命令使配置生效: sysctl -p 主机A须要给主机B传输一份10GB的数据,从应用层上能够作哪些传输优化?从TCP上能够作哪些传输优化? 答:从应用层上能够适当压缩文件,能够加快传输速度。从tcp上,不要使用ssh传输通道,能够借助nc命令来传输 scp /usr/bin/qpress yankay01:/usr/bin/qpress ssh yankay01 "nc -l 12345 | qpress -dio > /home/yankay/data" & qpress -o /home/yankay/data |nc yankay01 12345 第一行是将gpress安装到远程机器上,第二行在远程机器上使用nc监听一个端口,第三行压缩并传送数据。 ddos问题产生的本质是什么,阐述你想到的防护思路 答:本质:他们是黑客经过网络上事先留了木马后门的価尸主机发动的,只不过他们装的和正常访问的数据几乎同样,使得NF或其余防 护设备根本没法识别哪些是非法的数据流量,最后达到瘫痪网络的做用。 防护思路:一、采用高性能的网络设备引 二、尽可能避免NAT的使用 三、充足的网络带宽保证 四、升级主机服务器硬件 五、把网站作成静态页面 六、充分利用CDN来抵御攻击 last命令能够査看用户登陆成功的历史信息, 用less/var/log/secure能够看登陆日志 utmp:记录有关当前登陆用户的信息使用who命令査看 wtmp:记录历史用户登陆信息,使用last命令査看 Lastlog:记录最后一次登陆信息使用lsatlog命令査看 Messages:系统基础日志,内核、用户服务的日志• linux服务器间怎么实现无密码登陆 1,在本地生成公司钥, 2,复制生成的公钥到目标主机的家目录下的.ssh 目录下 2)将公钥传送到远程主机host上面,将公钥保存文件中,就能够实现无密码登陆了。 要注意关闭selinux iptables -t nat -A POSTROUTE -p tcp -d ip --dport 80 -j REDIRECT --to-ports 8080 (本地) -j DNAT --to ip:8080 容许本机对外链接80端口(本机能出数据包经过80 端口 iptables -A OUTPUT --dport 80 -j ACCEPT ipatables -A INPUT -t tcp --dport 3306 禁止外界ping 本机 ipatables -A INPUT -p icmp --icmp-type 8 -j DROP 防范DDOS攻击脚本 #防止SYN攻击 轻量级预防 iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN iptables -A syn-flood -j REJECT #防止DOS太多链接进来,能够容许外网网卡每一个IP最多15个初始链接,超过的丢弃 iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #用Iptables抵御DDOS (参数与上相同) iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT nginx与php-fpm的两种链接方式及其优缺点 一种是tcp/ip,一种是socket*前者用的是网络链接,本地和远程均可以连,而socket 只能在本地链接• Socket这种方式不依赖于网 络,也不会消耗网络链接的资源,理论上貌似要比tcp/ip那种方式要快•其实,二者在使用上,速度和效率相差不大 linux 集群 高可用和负载均衡两种 时间戳转换日期 date --date='@2147483647' 当前系统中最长用的十条命令 history | awk '{print $2}' | sort -n |uniq -c | sort -nr | head 空行所在行号 grep -n "^$" /etc/grub2.cfg 打印1-3行 sed -n '1,3p' /etc/grub2.cfg 替换使用 sed -r sed -r 's/#(.*)$/#@/' 22 LAMP的调优跟安全访问工做有哪些? 答: 1) apache的调优主要包括设置默认虚拟主机并限制访问、配置访问日志并切割、配置静态文件过时时间、配置防盗链等 2) Mysql的调优参考23套mysql部分第6题 3) Php优化参考21套10题 4) 安全访问主要包括用户的访问认证、配置容许或者拒绝ip访问、根据user_agent限制 浏览器访问等 os7层 答:(1)物理层(Physical Layer)物理层是0SI参考模型的最低层,它利用传输介质为数据链路层提供物理链接。为此,该层定义了物理链 路的创建、维护和拆除有关的机械、电气、功能和规程特性。包括信号线的功能、“0”和“1”信号的电平表示、数据传输速率、物理 链接器规格及其相关的属性等。物理层的做用是经过传输介质发送和接收二进制比特流。 (2) 数据链路层(Data Link Layer)数据链路层是为网络层提供服务的,解决两个相邻结点之间的通讯问题,传送的协议数据单元称为数据 帧。数据帧中包含物理地址(又称MAC地址)、控制码、数据及校验码等信息。该层的主要做用是经过校验、确认和反馈重发等手段, 将不可靠的物理链路转换成对网络层来讲无差错的数据链路•此外,数据链路层还要协调收发双方的数据传输速率,即进行流童控制,以 防止接收方因来不及处理发送方来的高速数据而致使缓冲器溢出及线路阻塞。 (3) 网络层(Network Layer)网络层是为传输层提供服务的,传送的协议数据单元称为数据包或分组。该层的主要做用是解决如何使数据 包经过各结点传送的问题,即经过路径选择算法(路由)将数据包送到目的地。另外,为避免通讯子网中出现过多的数据包而形成网络阻 塞,须要对流入的数据包数童进行控制(拥塞控制)•当数据包要跨越多个通讯子网才能到达目的地时,还要解决网际互连的问题。 (4) 传输层(TransportLayer)传输层的做用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流置控制等问 题。该层向高层屏蔽了下层数据通讯的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可 靠的数据通路。传输层传送的协议数据单元称为段或报文。 (5) 会话层(Session Layer)会话层主要功能是管理和协调不一样主机上各类进程之间的通讯(对话),即负贵创建、管理和终止应用程序之间 的会话。会话层得名的缘由是它很相似于 两个实体间的会话概念。例如,一个交互的用户会话以登陆到计算机开始•以注销结束。 (6) 表示层(PresentationLayer)表示层处理流经结点的数据编码的表示方式问题,以保证 —个系统应用层发出的信息可被另外一系统的应用 层读出.若是必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据表示格式转换成网络通讯中采用的标准表示形式。数据 压缩和加密也是表示层可提供的转换功能之一。 (7) 应用层(Application Layer)应用层是OSI参考模型的最高层,是用户与网络的接口. 该层经过应用程序来完成网络用户的应用需求,如 文件传输、收发电子邮件等 写一条iptables规则,丢掉每一个IP每秒访问80端口超过30次的数据包 限速 iptables -A INPUT -p tcp --dport 80 -tcp-flags FIN,SYN,RST,ACK -m connlimit --connlimit-ablove 30 使用rsync + inotify实现两台server间,文件实时同步。 history 显示时间 显示某程序的依赖库 ldd `which ssh` 查看某进程打开了哪些文件 进程--进程-PID lsof -p 进程号 使用tcpdump抓取两台serverl到server2的新建链接的数据包。答:假如361^61*11卩为1.1.1.1,361^6犷2 1卩为2.2.2.2 tcpdump -nn src host 1.1.1.1 and dst host 2. 2. 2. 2 50 内的随机数 echo $((RANDOM%50)) dns相关的经常使用命令答 scp和rsync都是能够远程传输文件 scp在传输的时候是整个文件备份,传输的时候霈要初入对方的密码 rsync传输的时候是增量备份,能够更改配置为在传输文件的时候不用输入对方的密码进行 批量建立用户加密码 seq -w 01 20