我想调整的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) 当我使用默认设置时:
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_ratio为300,因此可以增加限制。现在,当我启动 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 倍)在更改前后以相同的方式工作?
我正在尝试通过“具有大量连接和小数据包高流量的千兆网络”来提高我的 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) 我目前正在尝试在启动时设置 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.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)
所有这些球场都大不相同。将此值设置为高数(与低数相比)背后的原因是什么?哪一个应该是真正的“理智”价值开始?
我在 sysctl 的手册页中找不到答案。我的 sysctl.conf 文件仍处于默认状态,我正在测试几个值并通过sysctl -p newsettings.conf. 我认为重置就足够了sysctl -p(这意味着它从 中读取值sysctl.conf)。但是一个快速sysctl -a | grep domain显示仍然存在旧设置。
有任何想法吗?
在管理操作系统(特别是 OSX)的限制时,这三个工具的功能和历史有什么区别和重叠:
ulimitlaunchctl, launchdsysctl我发现在 OSX 上调整最大进程数和打开文件限制令人困惑。
某些进程是通过终端还是通过 GUI 启动,这有关系吗?
可能相关:
我已经做了尽可能多的研究,而没有直接挖掘内核源代码。关于这个主题似乎有大量虚假信息/不正确信息,所以我希望这能一劳永逸地回答我和其他人的问题。
严格来说,IPv4 端口耗尽真的可能吗?让我解释:
这就是问题:它是这样工作的吗?
最后,我对(传出)临时端口和正在侦听的传入端口感到有些困惑。我意识到一旦建立连接,连接的每一端都是对等的,但在此之前:
例如,如果确实 (srcip,srcport,dstip,dstport) 元组必须是唯一的,为什么我启用它,例如
net.ipv4.ip_local_port_range = 1024 65535
Run Code Online (Sandbox Code Playgroud)
这允许使用 1024-65535 的临时端口,如果我有绑定在端口 3306(例如 mySQL)上的服务,它们有时会因为端口正在使用而无法启动。
这是否与以下事实有关:(这是我要求验证的声明):
我正在尝试对通过 sysfs 虚拟文件系统公开的Linux 系统运行时参数进行大量更改。
维护这些参数的最有效方法是什么,以便它们在 RHEL/CentOS 风格的系统上重新启动后仍然存在?
它只是将命令转储到 /etc/rc.local 的情况吗?是否有非常适合此的初始化脚本?我也在从配置管理的角度考虑标准化。是否有一个干净的 sysfs 相当于sysctl?
我正在构建一个容器来调整负载均衡器的内核设置。我更喜欢使用单个特权容器将这些更改部署到映像中的主机。例如:
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 …