涉及内容比较杂乱,请耐心阅读,为自己阅读实践过程中摘要


设备:

    服务器IBM x3850 x6 

      戴尔 R720

    防火墙,华为 USG5120

交换机 (机房) 华为5700 二层,48GE电口

路由器 H3c ER3180G

交换机 s1048(办公司网络)





报错集合:

    一、程序僵死:获取url或者是业务记忆,找出nginx的出口和location。看nginx.comf和upstream,获取真实的real server。原来是server问题(1、数据库用户改密码报错。2、)

二、nginx:nginx前期要main属性和location访问参数配置。

          main:  worker_processes  工作内核占用

          access.log        访问日志

  error_log         错误日志

  limit_rate        限速模块

  gzip              数据压缩

          

          location :expires          客户端浏览器缓存时间

             proxy_set_header 完整获取客户端ip与服务端realserver ip

 还有if判断嵌套   ----因为涉及到dcn的ip,只有dcn的ip而且端口为80才,,,,if host=10.**.**.***

 client_max_body_size 配置上传文件大小

 

         测试环境,nginx服务器10次链接中有一次404

               在web服务器log中未找到报错,信息,排除tomcat,重点在nginx

               在nginx服务器上curl我的tomcat链接,无错

               原来是在nginx.conf中设置了limit,limit_conn   

 

 


linux系统优化

     基本的,如果不设计端口转发,我会关了【防火墙】,【selinux】

     关闭【sendmail】等一些工具,关闭【图形化界面】,【字符集】

应用服务器优化:

          基本的+

 【处理器子系统调优】:开启超线程,处理器,重要性不言而喻,cpu性能经常是瓶颈,Hyper-Threading(超线程功能,基于SMP 内核),

 Hyper-Threading 在操作系统里将一颗处理器虚拟化为两颗使用,使得处理器,同一时刻,可以执行两个线程或进程,

 配置Linux 内核如何更新dirty buffers 到磁盘,磁盘缓冲区用于暂存磁盘的数据,磁盘缓冲区速度

 内核优化中的opnefile(65535)

web服务器优化:

 linux内核参数调优/etc/sysctl.conf

          关闭如下参数可以防止***对服务器IP 地址的***(器忽略来自被列入网关的服务器的重定向,只接受可靠的重定向)  

        sysctl -w net.ipv4.eth0.secure_redirects=0

        sysctl -w net.ipv4.lo.secure_redirects=0

        sysctl -w net.ipv4.default.secure_redirects=0

        sysctl -w net.ipv4.all.secure_redirects=0

          拒绝接受广播风暴或者smurf***

  sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

 忽略所有的ucmp包或者ping

        sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1

 针对tcp与UDP的调优,支持time-wait套接字, 每个TCP 传输都包含远程客户端的协议信息缓存,所以有利于提高性能

      忽略所有icmp与ping

        sysctl -w net.ipv4.tcp_tw_reuse=1

 避免因为死套接字造成内存溢出 (套接字:Socket通信协议 ,目标ip和端口,tcp套接字通信必须保持一直链接)

        sysctl -w net.ipv4.tcp_fin_timeout=1

 keepalive检测tcp链接,链接缺省时候,丢掉,防止内存过度使用

        tcp_keepalive_time   启用keepalive,建立连接而未发送数据,防止空连接***,(可写20分钟)+

    sysctl -w net.ipv4.tcp_keepalive_time=1800

 对于所有协议的队列,设置系统最大发送缓存,接受缓存到8m

        sysctl -w net.core.wmem_max=8388608

sysctl -w net.core.rmem_max==8388608

 忽略所有icmp与ping

        sysctl -w net.ipv4.tcp_tw_reuse=1


               linux内核参数调优/etc/sysctl.conf

                      echo 1 > /proc/sys/net/ipv4/ip_forward  开启路由转发

                      /proc/sys/net/ipv4/tcp_wmem  最大tcp数据接收-发送缓存

                      shmmax  共享内存段的最大尺寸,oracle应该为2G

                      open_files

                       net.ipv4.ip_local_port_range = 1024 65000  向外连接端口的范围

                       tcp_keepalive_time   启用keepalive,建立连接而未发送数据,防止空连接***,(可写20分钟)


关于perl puppet


 

          echo 1 > /proc/sys/net/ipv4/ip_forward  开启路由转发

          /proc/sys/net/ipv4/tcp_wmem             最大tcp数据接收-发送缓存

          shmmax                                  共享内存段的最大尺寸,oracle应该为2G 

 TCP SYN cookies                         保护服务器避免受syn-flood ***      (我对这些乱七八糟的***没有研究,反正对于web服务器我会注意到这些系统自带的防***)

 




【tomcat】启动一般会所在用户的环境变量

如果tomcat本身指定的话:vi bin/setclasspath.sh

                          JAVA_HOME=/mall/jdk/jdk1.7.0_80

                          JRE_HOME=/mall/jdk/jdk1.7.0_80/jre

为httpsession安全性考虑,防止客户端脚本读取session cookie内容诸如进行CSRF/XSS恶意http***,可在tomcat6的

conf/context.xml配置文件中配置 <Context useHttpOnly="true"> 为自定义cookie及属性添加HttpOnly属性,在set-Cookie头部信息设置时可以添加"httponly"


   tomcat访问url不需要加项目名,直接IP+port

<context path="" docBase="/home/tomcat/tomcat8080/webapps/jsjp" reloadable=“true”>



【raid】

raid0 :两块硬盘以上,合成一块,提高读写速度

raid1:两块硬盘,又称为镜像方式,数据冗余,只有一半磁盘空间有效,另一半用来冗余,相比raid0,容量减半,速度不变,

raid5:raid0月raid1的折中方案,主流,至少三块硬盘,读取速度≈raid0  写入速度<单个磁盘,但是raid5的磁盘利用率大于raid1,数据写入时,按照一块硬盘的方式直接写入这块硬盘,

       同时写入校验信息,读取写入的时候,分别从三块硬盘上读取数据,再通过校验信息进行校验,一块硬盘顺坏,其他两块会计算出那一块的硬盘内容,raid5:只允许一块硬盘损坏

       当顺坏时候,替换上去新硬盘,raid自动利用奇偶校验信息重建此硬盘上的数据,保持raid5的高可靠性

       存储:只占用一个磁盘容量,应该三块硬盘一样大,否则以最小为准。

raid0+1:又称raid10,至少4块硬盘,简单的理解,多个磁盘组成raid0阵列,再进行冗余   

 

boot:linux text 字符型安装界面

boot:linux rescue 系统修复

touch -a 1.sh 将文件的访问时间改为当前时间

touch -m 1.sh 将文件的修改时间改为当前时间


cat /proc/cpuinfo |grep "physical" 物理cpu个数

cat /proc/cpuinfo |grep "process" 逻辑cpu个数

cat /proc/cpuinfo |grep "cpu.cores" |uniq 每个物理cpu中core的个数(核数)

配置服务器应用时,应以逻辑cpu的个数为准,物理cpu*核数=逻辑cpu个数 ,不等的话,则服务器支持超线程技术

 


dd if = /dev/cdrom of = /root/cdrom_bak.iso

备份整个分区:dd if=/dev/sda2 of=/opt/bak/sda2.bak

恢复 dd if=/opt/bak/sda2.bak of=/dev/sda2

查询软件包 rpm -qf /bin/bash


抓包  从本地eth0到172

 

crontab 

* * * * * /mall/web/tomcat/bin/start.sh

分 时 日 月 周

1 8-23 * * * 每天8点到23点的每小时一分钟执行(相当于每小时执行)  或者 * 8-23/1 * * * 



icmp  是tcp/UDP协议的子协议,是internet控制报文协议,用于传输出错报告控制信息


内存分配及使用情况可以通过jmap、jstat命令查看


rsync+inotify(同步+立即同步)


0000 0001 - 0111 1111: A类,1-127

1000 0000 - 1011 1111:B类, 128-191

1100 0000 - 1101 1111: C类,192-223

1110 0000 - 1110 1111:D类, 224-239

1111 0000 - 1111 1111: E类, 240 -255


A: 126个

每个网络中可以容纳的主机数:2^24-2

B: 2^14

每个网络中可以容纳的主机数:2^16-2

C: 2^21

每个网络中可以容纳的主机数:2^8-2


[root@jsjx ~]$ 

[root@jsjx ~]$ 

[root@jsjx ~]$ 

[root@jsjx ~]$ shutdown -h now

Error: Too many open files


task_`date +%Y%m%d`.log


netstat -nat |grep -i "80"

查看80端口的链接状态

netstat -nat|grep ':80\>'



PS1=[\u@\h \W]\$


【redis】

tomcat之间session的共享

redis是一个高可用的key-value存储系统,能够作为缓存框架和队列

redis可以缓存在disk与mem上,memcache只能缓存在mem

app sever与数据库都是cpu密集型:cpu bond 占用cpu资源比较大


memcache

http请求数据,检查数据存在memcache中,不是的话,查询数据库and返回给客户端,再缓存到memcache中每当变下次查询

                   更新数据时候,同事更新memcache中数据,保持一致





1.只查看该进程:ps -ef | grep 11345

2.查看该进程打开的文件:lsof -p 11345

3.查看内存分配:lcat /proc/11345/maps

4.查看堆栈:pstack 11345

5.查看发出的系统调用:strace -p 11345

6.查看调用库函数:ltrace -p 11345


用top -H -p pid命令查看进程内各个线程占用的CPU百分比

top -H -p 14094

top中可以看到有107个线程,但是下面9个线程占用CPU很高,下面以线程14086为主,分析其为何high CPU


使用gstack命令查看进程中各线程的函数调用栈

#gstack 14094 > gstack.log


僵死进程  ps -elf|grep Z


cd /proc/9301/

11   查看pid进程的程序在哪    cwd -> /mall/web/tomcat-client-life-circle/bin


挂载U盘  mount -t vfat(ext4) /dev/sda1 /mnt/usb

挂载光盘 mount -t iso9660 /dev/hda /mnt/cdrom

挂载软盘 mount -t msdos /dev/fdo /mnt/floppy


nas 挂载

mount 172.18.41.200:/vx/sm02 /data -o nolock

mount 172.18.41.201:/vx/bak /backup -o nolock



more /etc/login.defs 创建用户UID范围与口令

more /etc/default/useradd 创建用户默认设置


groupadd -g 10086 mygroup

useradd -g chen -G mygroup -d /opt/myhome

        -s /bin/bash -u 10086

usermod -L newchen oldchen

usermod -d /home/chen chen 修改


:set termencoding=gbk 中文乱码


tar -zcvf --exclude 

LVM是建立在磁盘分区和文件系统之间的一个逻辑层,管理员利用LVM可以在磁盘不用重新分区的情况下动态的调整分区的大小,

    如果系统新增了一块硬盘,通过LVM就可以将新增的硬盘空间直接扩展在原来的磁盘分区上

把/home的分区大小改为100M,不能损坏原有的数据。

df -h

umount /home/

e2fsch -f /dev/sda2

sizezfs /dev/sda2 100m

lvreduce -L 100m /dev/sda2

mount -a


【/etc/logrotate.d/nginx】

/mall/web/nginx/logs/8080_port.access.log {

daily

copytruncate

create

olddir /mall/web/nginx/logs/logrotate/8080

dateext

extension -%Y%m%d

rotate 90

compress

missingok

}


chkconfig --add nginx

chkconfig nginx on 

chkconfig --list nginx 

chkconfig ip6tables off

chkconfig --level 345 mysqld on



【时间同步】

时间同步(依靠另一个服务器)

     /etc/xinetd.d/time-stream   NO->YES

     /etc/init.d/xine stop/start restart

rdata -s IP(另一个) 同步时间,以另一个IP时间为准   

service xinetd restart 以此同步到另一台服务器时间  

/dev/hda2 hd:IDE硬盘  a表示第一块硬盘

/dev/sda2 sd:scsi硬盘 

1-4(主分区或扩展分区)  5----逻辑分区

硬盘的容量   =    主分区的容量   +    扩展分区的容量

扩展分区的容量  =  各个逻辑分区的容量之和


etc/fstab 开机自动挂载分区列表,需要开机自动挂载的分区,都可以

etc/sysctl.conf 系统内核参数配置文件

etc/service 定义系统服务与端口的对应关系

etc/syslog.conf 系统日志输入文件

/usr/lib 或者 /local/lib 系统使用的函数库目录  

fsck -rv -t exts /dev/sda1 修复磁盘分区


netstat -rn :显示当前系统路由信息

netstat -tlnpu :显示当前已经启动网络连接和对应的端口信息

netstat -atunp:当前系统上处于网络连接状态的资源信息

netstat -nat :当前所有端口的网络连接的状态


traceroute -i eth0 -s 192.168.60.251 -w 10 www.baidu.com 100 

跟踪从本机到网络www.baidu。com的数据包过程,指定eth0网络接口发送数据包,同时指定本地发送数据包的ip为192.168.60.251 设置超时时间为10秒,发送的数据包大小为100bytes

可以看出,本机到百度对应的ip地址经过了18个路由。


route add -net 10.35.40.0 netmask 255.255.255.0 gw 10.35.40.254   gw只能是本网段的gw

写进/etc/rc.local,开机自启动


iptables -t nat -I POSTROUTING -s 10.35.40.0/24 -j S