博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运维杂记-01
阅读量:5249 次
发布时间:2019-06-14

本文共 6382 字,大约阅读时间需要 21 分钟。

#########socket tcp 系统调优#############

什么是socket?

Socket 五元组  1.源ip地址  2. 源端口 3.目的ip地址  4.目的端口  5.类型 TCP or UDP

 tcp报头如下:tcp首部报头20字节 其中目的端口和源端口分别是16bit,就是2**16-1个可用端口,0-65536 因为0不能用就减一 65535个

在Centos7中可以查看可以使用的端口数

[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/ip_local_port_range 32768	60999#下面是更改方法,一般不建议增加10000以下的端口,因为有些服务可能会使用10000以下#的端口容易引起冲突[root@192-168-13-165 ~]# echo "10000 65000" > /proc/sys/net/ipv4/ip_local_port_range [root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/ip_local_port_range 10000	65000

可以尝试用ab测试看是否能测试错socket限制问题,模拟发送2万个请求,2000的并发来测试百度

[root@192.168.13.165]#ab -n 10000 -c 2000 https://www.baidu.com/This isApacheBench, Version 2.3 <$Revision: 1430300 $>Copyright 1996Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to TheApache Software Foundation, http://www.apache.org/ Benchmarkingwww.baidu.com (be patient)socket: Toomany open files (24)

报错我们很容易看懂了socket: Too many open files (24) 不能打开太多的文件。我们使用ulimit来看看系统资源限制。

[root@test ~]# ulimit -acore file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals                 (-i) 31219max locked memory       (kbytes, -l) 64max memory size         (kbytes, -m) unlimitedopen files                      (-n) 1024(省略部分输出)

没错,默认情况下,当前用户能够打开的文件数量最大是1024,但是这个和我们使用ab测试有什么关系呢?ab测试创建的不是socket吗?如果你不理解,那就要回归本质,想想我们刚刚学习Linux的时候,经常听到的一句Linux的思想“一切皆文件”!谁说socket不是一个文件呢?

可以使用ulimit –n来修改当前用户、当前session的限制,也可以修改配置文件/etc/security/limits.conf来彻底解决这个问题,这也是进行系统性能调优的必备基础。


NetCat检查nc,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

作用:1.远程拷贝文件  2.克隆硬盘或分区 3.端口扫描 4.保存Web页面 5.模拟HTTP Headers  6.聊天 7.传输目录  详细见http://www.cnblogs.com/lpfuture/p/4638335.html

我这里用于演示tcp socket连接

[root@192-168-13-21 ~]# nc -l -4 -p 8888 -khahhello[root@192-168-13-201 ~]# nc 192.168.13.21 8888hahhello^C#当13.201 ctrl C的时候查看网络连接状态为TIME_WAIT[root@192-168-13-201 ~]# netstat -an |grep 192.168.13.21tcp        0      0 192.168.13.201:53667         192.168.13.21:8888           TIME_WAIT   #在查看13.21[root@192-168-13-21 ~]# netstat -an |grep 192.168.13.201#当13.21 ctrl C的时候查看网络连接状态为TIME_WAIT[root@192-168-13-21 ~]# nc -l -4 -p 8888 -khah^C[root@192-168-13-21 ~]# netstat -an |grep 192.168.13.201tcp        0      0 192.168.13.21:8888       192.168.13.201:53671     TIME_WAIT  [root@192-168-13-201 ~]# netstat -an |grep 192.168.13.21 #从上面的实验中可以判断出TCP的TIME_WAIT状态只会出现在主动端口的一方!!![root@192-168-13-21 ~]# lsof -i:8888  #listopenfile 的简写COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnc 1631 root 3u IPv4 1038816226 0t0 TCP *:ddi-tcp-1 (LISTEN)nc 1631 root 4u IPv4 1038828329 0t0 TCP 192-168-13-21:ddi-tcp-1->192.168.13.201:53681 (ESTABLISHED)

还有一种叫做伪终端发送数据

[root@192-168-13-201 ~]# echo "hehe" > /dev/tcp/192.168.13.21/8888服务器端用nc监听8888就能收到hehe

如果有大量的TIME_WAIT存在,那么这个套接字对是不释放的,不释放也就代表着占用一个,资源嘛,占用一个就少一个。

下图实线为tcp 三次握手和四次断开客户端的状态变化过程,虚线为服务器端状态变化过程

状态图来自赵班长:

 

4次挥手

4次挥手,是全双工通讯决定断开为什么要4次,对数据传输负责,断开需要确认
第一张图中的2msl 在linux上是60s,用于什么数据包迷路之类 还没弄清楚
timewait多了主要占用了socket,实际上 cpu 和内存资源占的很少。
所以在服务器一般对socket进行调优
#tcp时间戳 (1为打开 0为关闭)[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/tcp_timestamps 1#tcp socket复用 (1为打开 0为关闭) 尽量用复用连接,这个配置主要影响的是Web服务器到DB服务器的连接复用,因为服务器是客户端[root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/tcp_tw_reus0#tcp socket快速回收 (1为打开 0为关闭) [root@192-168-13-165 ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle 0

1.socket 复用是根据时间戳 默认已经打开,reuse 打开前提是时间戳必须打开。

2.当客户端处于nat网络中 不能打开快速回收,一般在负载均衡器上是不开的
ps:
1.socket是有限的 1-65535,从另一个角度来说多ip可以解socket数量不足问题。
2.nginx不支持多ip发起请求,haproxy支持多ip发起请求
3.自己写程序一般要支持多ip发起请求,就是为了可扩展socket数量。
#############################end#########################

########nginx相关###########

keep-alive在nginx中keepalive_timeout

长连接多了cpu资源,少了可能就慢,因为用户要多次连接。如果在连接数很大的情况下,设置30s到60s的keepalive_timeout区别会很大,并发的连接数可能飙升,长连接打开需要权衡,包括php到mysql的连接,要看mysql的最大连接数支持和性能等情况。

 

Sendfile 函数在两个文件描述符之间直接传递数据(完全在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率很高,被称之为零拷贝。
sendfile的详细解释见 http://blog.csdn.net/hnlyyk/article/details/50856268
tcp_nopush on ? 一次报头 数据多次发送
tcp_nodelay on ?
以上2个参数不能同时用
nginx进程 master一般是不处理请求
master只进行管理worker进程
nginx如何做滚动升级?会有2个master进程存在,老的处理完 新的接收
nginx reload 就滚动的,如果是下载的请求 nginx reload 可能会有问题,会有很多的worker进程挂起
如果不reload 动态的就实现变更,通过接口的方式?
把lua内嵌的nginx 用lar实现nginx的负载均衡
 
cookie 保存一些服务器的信息 比如 购物车,服务器端保存在redis里面保留1个月
ping.chainaz.com 分布式检查网站等工具
###########nginx end#############
 
#####安装服务 三步走######
安装
  1.包管理工具 yum apt-get
     2.编译安装 ./configure  make 也是一种编译器c c++
           java:ant maven gradle
        3.二进制
配置:
         1.网络 2.路径 3.容量 4.性能 5.安全 6.功能 7 日志 。。。。
启动:
         1.systemctl service
         2.../执行
         3.nohup  screen(推荐)
管理:
优化:
############end###############
############系统相关#############
存储:
文件存储 块存储 对象存储
redis 写个几十G就差不多了   
内存页默认4096 磁盘块默认block 4096 
                 
LevelDB(SSDB 360开发的支持大数据存储)
 
cpu运行级别 ring0(特权模式) ring1 ring2 ring3(用户模式)
系统调用 就会进入内核态
cpu 上下文切换,linux 默认cpu切换一个时间片是多少?(作业)
cpu的寄存器 进程调度 优先级
让linux系统尽量的不使用交换分区,越低用的越少
如何让linux尽量的不使用交换分区,越低用的越少
[root@192-168-13-165 ~]# cat /proc/sys/vm/swappiness 60
缺页中断 cpu ---内存----硬盘(cpu要数据的顺序,cpu只往内存要数据)
io调度算法 centos6
[root@192-168-13-165 ~]# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]

io调度算法 centos7

[test@192-168-13-164 ~]$ cat /sys/block/sda/queue/scheduler noop [deadline] cfq
ssd 把调度算法 一定用noop,cfq 是完全公平的调度算法
 
apache用的 select nginx用epoll (多路io复用)

临地更改I/O调度方法:

例如:想更改到noop电梯调度算法:

echo noop > /sys/block/sda/queue/scheduler

想永久的更改I/O调度方法:

修改内核引导参数,加入elevator=调度程序名

vi /boot/grub/menu.lst

更改到如下内容:

kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

重启之后,查看调度方法:

cat /sys/block/sda/queue/schedulernoop anticipatory [deadline] cfq

已经是deadline了

##################end#####################
##################others#################
断点续传的状态码是什么?http 206  通过http头里面的range
浏览器边下载边渲染,从上往下,不同的浏览器对单域名并发是有限的,可能是8或者其它值
浏览器还有一种懒加载说法,默认不往下面拉就不加载下面的内容的
浏览器加载到js 会先读取,然后执行,执行完了以后再继续往下面加载,所有js一般放在html的最下面
web架构如果访问量小可以用
nginx(代理)+(nginx(7层处理)+tomcat 不记录日志只处理动态请求)
 
赵班长推荐的书:unix网络编程卷1  性能之巅 abs
相关的技术文章推荐:
运维知识体系:
https://www.unixhot.com/page/ops
nginx结合waf:
https://github.com/unixhot/waf
单台服务器tcp最大连接数
cpu io 内存
http://os.51cto.com/art/201012/240476.htm
前端优化
linux 微观角度是不区分进程和线程的,理论上进程是包括线程的,线程共享内存空间,进程的内存空间是独立的
  (http)
www.cnbolgs.com/wxisme/p/6212797.html  (http)
   (git)
高级shell编程脚本
http://www.linuxplus.org/kb/
linux系统tcp优化
http://joyexpr.com/2013/11/22/c100k-4-kernel-tuning/
 

转载于:https://www.cnblogs.com/xiewenming/p/7441601.html

你可能感兴趣的文章
list删除、集合遍历删除
查看>>
趣谈Java变量的可见性问题
查看>>
图标字体制作 -- 将SVG制作成图标字体文件,通过引入使用
查看>>
为Eclipse添加C/C++开发工具
查看>>
杭州互联网公司汇总
查看>>
Sublime text3 注册失效解决方法
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
hdu 1423 Greatest Common Increasing Subsequence(DP 最长公共上升子序列)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
如何在.xml文件中配置Servlet信息
查看>>
使用AVCaptureSession捕捉静态图片
查看>>
redis enable TLS
查看>>
bugku web 头等舱
查看>>
Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse三者之间的区别
查看>>
浅谈replace()
查看>>
铁大课表 项目开发计划书
查看>>
初中级前端开发工程师如何提升个人能力?
查看>>
HTTP状态码
查看>>
算法之【仿竖式算法】
查看>>