标签: sysctl

FreeBSD 性能调优:Sysctl 参数、loader.conf、内核

我想调整的FreeBSD的共享知识通过sysctl.conf/ loader.conf / KENCONFFreeBSD有调整/等它最初是基于伊戈尔Sysoev为的(Nginx的作者)呈现高达10-20万个的有效连接。较新版本的 FreeBSD 可以处理更多。

调整适用于 FreeBSD7 - FreeBSD-CURRENT。从 7.2 amd64 开始,默认情况下,其中一些已经很好地调整了。在 7.0 之前,其中一些仅用于引导(通过 设置 /boot/loader.conf)或根本不存在。

sysctl.conf

# No zero mapping feature
# May break wine
# (There are also reports about broken samba3)
#security.bsd.map_at_zero=0

# Servers with threading software apache2 / Pound may want to rise following sysctl
#kern.threads.max_threads_per_proc=4096

# Max backlog size
# Note Application can still limit it by passing second argument to listen(2) syscall
# Note: Listen queue be monitored …
Run Code Online (Sandbox Code Playgroud)

freebsd performance performance-tuning sysctl

131
推荐指数
4
解决办法
18万
查看次数

vm.overcommit_memory 如何工作?

当我使用默认设置时:

vm.overcommit_memory = 0
vm.overcommit_ratio = 50
Run Code Online (Sandbox Code Playgroud)

我可以从/proc/meminfo文件中读取这些值:

CommitLimit:     2609604 kB
Committed_AS:    1579976 kB
Run Code Online (Sandbox Code Playgroud)

但是,当我vm.overcommit_memory从更改0为 时2,我无法启动更改前可以启动的同一组应用程序,尤其是 amarok。我不得不更改vm.overcommit_ratio300,因此可以增加限制。现在,当我启动 amarok 时,/proc/meminfo显示以下内容:

CommitLimit:     5171884 kB
Committed_AS:    3929668 kB
Run Code Online (Sandbox Code Playgroud)

这台机器只有 1GiB 的内存,但是 amarokvm.overcommit_memory设置为 0时没有问题。但是在设置为 的情况下2,amarok 需要分配超过 2GiB 的内存。这是正常行为吗?如果是这样,谁能解释为什么,例如,firefox(比 amarok 消耗的内存多 4-6 倍)在更改前后以相同的方式工作?

memory kernel sysctl

61
推荐指数
2
解决办法
11万
查看次数

在具有大量连接和小数据包高流量的千兆网络上提高 TCP 性能

我正在尝试通过“具有大量连接和小数据包高流量的千兆网络”来提高我的 TCP 吞吐量。我的服务器操作系统是 Ubuntu 11.10 Server 64bit。

大约有 50.000 个(并且还在不断增加)客户端通过 TCP 套接字(都在同一个端口上)连接到我的服务器。

我 95% 的数据包大小为 1-150 字节(TCP 标头和有效负载)。其余 5% 从 150 到 4096+ 字节不等。

使用下面的配置,我的服务器可以处理高达 30 Mbps(全双工)的流量。

您能否建议最佳实践以根据我的需要调整操作系统?

我的/etc/sysctl.cong看起来像这样:

kernel.pid_max = 1000000
net.ipv4.ip_local_port_range = 2500 65000
fs.file-max = 1000000
#
net.core.netdev_max_backlog=3000
net.ipv4.tcp_sack=0
#
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.somaxconn = 2048
#
net.ipv4.tcp_rmem = 4096 87380 16777216 
net.ipv4.tcp_wmem = 4096 65536 16777216
#
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_mem = 50576   64768   98152
#
net.core.wmem_default = …
Run Code Online (Sandbox Code Playgroud)

networking linux ubuntu kernel sysctl

41
推荐指数
2
解决办法
11万
查看次数

设置 net.netfilter.nf_conntrack_buckets 的正确位置在哪里?

我目前正在尝试在启动时设置 net.netfilter.nf_conntrack_buckets。我最初认为这可以通过 sysctl.conf 完成,但根本没有应用 net.netfilter.nf_conntrack_buckets(和其他 net.netfilter 配置)。将 sysctl -p 添加到 rc.local 允许应用所有 net.netfilter 配置,但 net.netfilter.nf_conntrack_buckets 除外。我还会注意到,尝试使用 sysctl -w 从终端设置它会导致“错误:对密钥 'net.netfilter.nf_conntrack_buckets' 的权限被拒绝”

# This should be applied at boot
net.netfilter.nf_conntrack_max=1966080
net.netfilter.nf_conntrack_buckets=245760
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确位置在哪里?

sysctl centos6 conntrack nf-conntrack

13
推荐指数
2
解决办法
1万
查看次数

sysctl.conf 中 net.ipv4.tcp_max_syn_backlog 的合理值

我在调sysctl.conf

根据linode 网站上的优化指南,以下是要设置的合理值sysctl.conf

net.ipv4.tcp_max_syn_backlog = 3240000
Run Code Online (Sandbox Code Playgroud)

但是,archlinux 优化指南中的相同值是:

net.ipv4.tcp_max_syn_backlog = 65536
Run Code Online (Sandbox Code Playgroud)

最后,在另一个优化博客上(虽然很旧,但在谷歌上的 SEO 仍然很高),其价值被吹捧为:

net.ipv4.tcp_max_syn_backlog = 4096
Run Code Online (Sandbox Code Playgroud)

所有这些球场都大不相同。将此值设置为高数(与低数相比)背后的原因是什么?哪一个应该是真正的“理智”价值开始?

linux ubuntu sysctl

13
推荐指数
1
解决办法
2万
查看次数

如何将 sysctl 重置为其操作系统默认值?

我在 sysctl 的手册页中找不到答案。我的 sysctl.conf 文件仍处于默认状态,我正在测试几个值并通过sysctl -p newsettings.conf. 我认为重置就足够了sysctl -p(这意味着它从 中读取值sysctl.conf)。但是一个快速sysctl -a | grep domain显示仍然存在旧设置。

有任何想法吗?

debian reset sysctl

12
推荐指数
1
解决办法
2万
查看次数

ulimit、launchctl、sysctl 的区别?

在管理操作系统(特别是 OSX)的限制时,这三个工具的功能和历史有什么区别和重叠:

  1. ulimit
  2. launchctl, launchd
  3. sysctl

我发现在 OSX 上调整最大进程数和打开文件限制令人困惑。

某些进程是通过终端还是通过 GUI 启动,这有关系吗?

可能相关:

mac-osx ulimit launchctl sysctl

12
推荐指数
1
解决办法
1691
查看次数

Linux 网络端口耗尽

我已经做了尽可能多的研究,而没有直接挖掘内核源代码。关于这个主题似乎有大量虚假信息/不正确信息,所以我希望这能一劳永逸地回答我和其他人的问题。

严格来说,IPv4 端口耗尽真的可能吗?让我解释:

  • 貌似有 65535 个端口可供使用。0 不可用。
  • 我读过端口耗尽需要 (src ip, src port, dst ip, dst port) 元组是唯一的。
  • 明确并假设我可以通过 sysctl net.ipv4.ip_local_port_range 设置使用 100% 的临时端口

这就是问题:它是这样工作的吗?

  • 我可以有 65k 个连接,从 127.0.0.1:(x) 到 127.0.0.1:80
  • 我可以有 65k 个连接,从 127.0.0.1:(x) 到 127.0.0.1:555
  • 基本上再一次,问题是 (srcip,srcport,dstip,dstport) 必须是唯一的,对吗?
  • 我无法打开ip "A" 到 IP "B"、端口 "N" 的超过 65k 个连接
  • 同样,单个 IP无法在 xxxx:80 处打开到我的网络服务器的超过 65k 个连接,但是只要它们来自不同的源 IP,我就可以支持超过 65k 的总体连接?

最后,我对(传出)临时端口和正在侦听的传入端口感到有些困惑。我意识到一旦建立连接,连接的每一端都是对等的,但在此之前:

例如,如果确实 (srcip,srcport,dstip,dstport) 元组必须是唯一的,为什么我启用它,例如

net.ipv4.ip_local_port_range = 1024 65535
Run Code Online (Sandbox Code Playgroud)

这允许使用 1024-65535 的临时端口,如果我有绑定在端口 3306(例如 mySQL)上的服务,它们有时会因为端口正在使用而无法启动。

这是否与以下事实有关:(这是我要求验证的声明):

  • (srcip,srcport,dstip,dstport) 对每个连接都需要是唯一的,端口范围为 1-65535(不注意操作系统对临时端口的使用) …

networking linux port sysctl

12
推荐指数
1
解决办法
1万
查看次数

使 sysfs 参数在重新启动后保持不变的建议

我正在尝试对通过 sysfs 虚拟文件系统公开的Linux 系统运行时参数进行大量更改

维护这些参数的最有效方法是什么,以便它们在 RHEL/CentOS 风格的系统上重新启动后仍然存在?

它只是将命令转储到 /etc/rc.local 的情况吗?是否有非常适合此的初始化脚本?我也在从配置管理的角度考虑标准化。是否有一个干净的 sysfs 相当于sysctl

linux configuration-management sysctl

11
推荐指数
3
解决办法
1万
查看次数

使用特权 Docker 容器进行内核调优

我正在构建一个容器来调整负载均衡器的内核设置。我更喜欢使用单个特权容器将这些更改部署到映像中的主机。例如:

docker run --rm --privileged ubuntu:latest sysctl -w net.core.somaxconn=65535
Run Code Online (Sandbox Code Playgroud)

在测试中,更改生效但仅适用于该容器。我的印象是,使用完全特权的容器更改 /proc 实际上会更改底层操作系统。

$docker run --rm --privileged ubuntu:latest \
    sysctl -w net.core.somaxconn=65535
net.core.somaxconn = 65535

$ docker run --rm --privileged ubuntu:latest \
    /bin/bash -c "sysctl -a | grep somaxconn"
net.core.somaxconn = 128
Run Code Online (Sandbox Code Playgroud)

这是特权容器应该如何工作吗?

我只是在做一些愚蠢的事情吗?

做出持久改变的最佳方法是什么?

版本信息:

Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
Run Code Online (Sandbox Code Playgroud)

挂载 /proc …

linux su sysctl docker

10
推荐指数
2
解决办法
2万
查看次数