[linux] linux 内核参数tcp_tw_reuse、tcp_tw_recycle、tcp_timestamp详解


1、参数概述

1
2
3
tcp_tw_reuse:允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
tcp_tw_recycle:表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
tcp_timestamps:tcp时间戳

2、查看三个参数当前的状态

1
2
3
4
shell > sysctl -a|grep -E "tcp_timestamp|tw_reuse|tw_recycle"
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0

3、参数解析

tcp_tw_reuse:仅在TCP套接字作为客户端,调用connect时起作用。绝大部分的TCP服务器,应该不会有大量主动连接的动作(或许会连接DB等,但一般也是长连接)。因此这个选项对于TCP服务来说,基本上是无用的,完全是没必要打开。只有服务器作为客户端,发起一下短小事务的连接的时候该参数才能凸显作用。必须启用net.ipv4.tcp_timestamps参数,才允许重用TIME_WAIT套接字,tcp_tw_reuse参数才会起作用。
tcp_tw_recycle:这种回收参数,在nat环境过会存在重大问题,丢弃大量的可用连接。例如:公司使用LVS做负载均衡,通常是前面一台LVS,后面多台后端服务器,这其实就是NAT,当请求到达LVS后,它修改地址数据后便转发给后端服务器,但不会修改时间戳数据,对于后端服务器来说,请求的源地址就是LVS的地址,加上端口会复用,所以从后端服务器的角度看,原本不同客户端的请求经过LVS的转发,就可能会被认为是同一个连接,加之不同客户端的时间可能不一致,所以就会出现时间戳错乱的现象,于是后面的数据包就被丢弃了,具体的表现通常是是客户端明明发送的SYN,但服务端就是不响应ACK。
因此在nat环境下建议禁用该参数。
禁用方式:
echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle;
可以保留tcp_timestamps参数,默认是开启的,只要把tcp_tw_recycle参数禁用了回收机制就不起作用了。
当然也可以把这个参数禁用,禁用命令如下:
sysctl -w net.ipv4.tcp_timestamps=0

点击阅读

[linux] curl请求返回http_code和响应时间


curl -o /dev/null -s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} http://www.baidu.com
或者
curl -o /dev/null -s -w %{http_code}:%{time_connect}:%{time_starttransfer}:%{time_total} http://www.baidu.com

点击阅读

[linux] linux增加swap空间


1、原有的swap空间不足,安装oracle client报错,需要增加swap

查看当前swap

1
2
3
4
[oracle@node3 response]$ free -m
total used free shared buff/cache available
Mem: 5663 4480 109 150 1073 714
Swap: 2047 2017 30

生成swap文件
dd if=/dev/zero of=/var/swap bs=1M count=1024

将文件格式化为交换文件:
mkswap /var/swap

加载这个交换文件:
chmod 600 /var/swap
swapon /var/swap

添加到开机启动

1
2
[root@node3 ~]# cat /etc/fstab
/var/swap swap swap defaults 0 0

之后查看可用swap空间

1
2
3
4
[root@node3 ~]# free -m
total used free shared buff/cache available
Mem: 5663 4561 118 146 983 636
Swap: 3071 2009 1062

点击阅读

[linux]gitlab迁移项目


1、下载源代码库

1
2
3
4
5
6
7
8
9
[root@dax-mysql-slave cbibank]# git clone http://gitlab.cbi.com/dax.fe/bank-www.git
正克隆到 'bank-www'...
Username for 'http://gitlab.cbi.com': 123123@qq.com
Password for 'http://123123@qq.com@gitlab.cbi.com':
remote: Counting objects: 2852, done.
remote: Compressing objects: 100% (1237/1237), done.
remote: Total 2852 (delta 1596), reused 2747 (delta 1535)
接收对象中: 100% (2852/2852), 125.87 MiB | 459.00 KiB/s, done.
处理 delta 中: 100% (1596/1596), done.

2、查看当前gitlab地址

1
2
3
[root@dax-mysql-slave bank-www]# git remote -v
origin http://gitlab.cbi.com/dax.fe/bank-www.git (fetch)
origin http://gitlab.cbi.com/dax.fe/bank-www.git (push)

3、在目标gitlab新建一个项目,项目地址

https://gitlab.com/zeven0707/bank-www.git

4、下面将源代码库地址替换为目标库地址

1
2
3
4
[root@dax-mysql-slave bank-www]#  git remote set-url origin https://gitlab.com/zeven0707/bank-www.git
[root@dax-mysql-slave bank-www]# git remote -v
origin https://gitlab.com/zeven0707/bank-www.git (fetch)
origin https://gitlab.com/zeven0707/bank-www.git (push)

5、查看当前分支

1
2
[root@dax-mysql-slave bank-www]# git branch
* master

6、将master分支推送到目标项目

1
2
3
4
5
6
7
8
9
10
11
[root@dax-mysql-slave bank-www]# git push origin master:master
Username for 'https://gitlab.com': 123123@qq.com
Password for 'https://123123@qq.com@gitlab.com':
Counting objects: 2820, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (1144/1144), done.
Writing objects: 100% (2820/2820), 125.87 MiB | 6.96 MiB/s, done.
Total 2820 (delta 1596), reused 2820 (delta 1596)
remote: Resolving deltas: 100% (1596/1596), done.
To https://gitlab.com/zeven0707/bank-www.git
* [new branch] master -> master

推送完成,通过gitlab ui查看项目已经推送成功。

6.1、推送分支

git checkout -b develop origin/develop
git push origin develop:develop

点击阅读

[linux] shadownsocks-server部署


1、确保安装 2.6 或者 2.7

1
2
3
$ python --version
Python 2.6.8
Then install from PIP

2、安装pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

3、安装shadowsocks

pip install shadowsocks

查看已安装软件列表
pip freeze|grep shadow
which ssserver
/usr/local/bin/ssserver

创建配置目录配置文件

1
2
3
4
5
6
7
8
9
10
11
12
mkdir /etc/shadowsocks -p
more /etc/shadowsocks/config.json
{
"server":"0.0.0.0",
"server_port":1194,
"local_address":"127.0.0.1",
"password":"123!@#ljt",
"timeout":300,
"method":"aes-256-cfb",
"fast_open":false,
"workers":4
}

4、启动服务

ssserver -c /etc/shadowsocks/config.json -d start
启动服务指定日志文件
ssserver -c /etc/shadowsocks/config.json -d start --log-file /tmp/shadowsock.log
在后台启动 ss 客户端
nohup sslocal -s your_server_ip -p your_server_port -l 1080 -k your_server_passwd -t 600 -m rc4-md5 > /dev/null 2>&1 &

点击阅读

[linux] docker更换默认的目录


1、查看docker安装完成之后默认的路径

1
2
3
4
[root@node3 docker]# docker info
.....
Docker Root Dir: /var/lib/docker
......

2、修改docker.service配置文件,添加参数-graph /data/docker(/data/docker为指定的新的docker根目录)

vim /usr/lib/systemd/system/docker.service

1
2
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -
-graph /data/docker

3、修改完成之后,重新加载启动docker

1
2
3
4
systemctl disable docker
systemctl enable docker
systemctl daemon-reload
systemctl start docker

4、重新查看docker根目录

1
2
3
4
[root@node3 docker]# docker info
.....
Docker Root Dir: /data/docker
.....

点击阅读

Proudly powered by Hexo and Theme by Lap
本站访客数人次
© 2020 zeven0707's blog