标签: tuning

什么限制了 Linux 服务器上的最大连接数?

什么内核参数或其他设置控制可以在 Linux 服务器上打开的最大 TCP 套接字数?允许更多连接的权衡是什么?

我注意到在使用ab对 Apache 服务器进行负载测试时,很容易最大化服务器上​​的开放连接。如果你不使用 ab 的 -k 选项,它允许连接重用,并让它发送超过 10,000 个请求,那么 Apache 会处理前 11,000 个左右的请求,然后停止 60 秒。查看 netstat 输出显示 11,000 个连接处于 TIME_WAIT 状态。显然,这是正常的。出于TCP 可靠性的原因,即使在客户端完成连接后,连接也会保持打开的默认值 60 秒。

这似乎是对服务器进行 DoS 的一种简单方法,我想知道它的常用调整和预防措施是什么。

这是我的测试输出:

# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The …
Run Code Online (Sandbox Code Playgroud)

linux performance tuning scaling apache-2.2

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

MySQL 降低 wait_timeout 值以减少打开的连接数

我运行一个相当繁忙的站点,在偷看时间,当运行 netstat 命令时,我在我的网络服务器上看到超过 10.000 个到我的数据库服务器的打开连接。99% 的连接都在TIME_WAIT状态中。

我今天了解了这个 mysql 变量:wait_timeout http : //dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_wait_timeout。我的仍然设置为默认的 28.800 秒。

降低这个值安全吗?

我的查询通常不会超过一秒钟。因此,将连接保持打开 480 分钟似乎很愚蠢。

我也听说过使用mysql_pconnect而不是mysql_connect,但我一直在读关于它的恐怖故事,所以我想我会远离它。

mysql tuning

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

如何识别 Linux 服务器上的 I/O 瓶颈?

您如何确定 Linux 服务器的性能受 I/O 限制,也许更重要的是,哪个或哪些进程导致了问题?

linux performance tuning io

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

需要将 nginx 吞吐量增加到上游 unix 套接字——Linux 内核调整?

我正在运行一个 nginx 服务器,它充当上游 unix 套接字的代理,如下所示:

upstream app_server {
        server unix:/tmp/app.sock fail_timeout=0;
}

server {
        listen ###.###.###.###;
        server_name whatever.server;
        root /web/root;

        try_files $uri @app;
        location @app {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://app_server;
        }
}
Run Code Online (Sandbox Code Playgroud)

一些应用服务器进程反过来在请求/tmp/app.sock可用时将其拉出。此处使用的特定应用服务器是 Unicorn,但我认为这与此问题无关。

问题是,似乎超过一定量的负载后,nginx 无法以足够快的速度通过套接字获取请求。我设置了多少个应用服务器进程并不重要。

我在 nginx 错误日志中收到了大量这些消息:

connect() to unix:/tmp/app.sock failed (11: Resource temporarily unavailable) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)

许多请求会导致状态代码 502,以及那些不需要很长时间才能完成的请求。nginx 写入队列统计数据徘徊在 1000 左右。

无论如何,我觉得我在这里遗漏了一些明显的东西,因为 nginx 和应用程序服务器的这种特殊配置非常普遍,尤其是对于 Unicorn(实际上这是推荐的方法)。是否有任何需要设置的 linux 内核选项,或者 nginx 中的某些内容?关于如何增加上游套接字的吞吐量的任何想法?我显然做错了什么?

关于环境的其他信息:

$ uname -a
Linux …
Run Code Online (Sandbox Code Playgroud)

linux tuning nginx socket unicorn

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

我应该使用 thread_cache_size 的什么值?

我正在将 Asp.Net 与 MySQL 一起使用。在 .Net 连接字符串中,我将 Max Pool Size 设置为 150。

如果我运行以下命令,我会得到这些值:

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474
Run Code Online (Sandbox Code Playgroud)

这给出了 Threads_created / Connections = 0,1392。

所以从那看来我需要增加thread_cache_size.

但是,如果我运行,SHOW PROCESSLIST我总是会看到由于 .Net 创建的池,我有很多连接打开(其中大部分在休眠)。我是否仍然需要设置,thread_cache_size因为我仍然会重用连接池中的连接?如果池大小为 150,您认为将其设置thread_cache_size为 150+ 是否合适?这会大大影响 CPU 和内存吗?

mysql tuning .net connections

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

为什么磁盘密集型应用程序在 SAN 上比在物理磁盘上运行得更快?

为什么磁盘密集型应用程序在 SAN 上比在物理磁盘上运行得更快?我原以为物理磁盘会稍微快一点,但实际上,当它的工作驱动器设置为 SAN 上的分区时,该过程的运行速度会快 100 倍。

我们的猜测是 SAN 开箱即用优化为快速,而物理磁盘调整设置与操作系统 (Solaris) 相关并且尚未触及或操作系统修补。

在最高活动期间,磁盘 I/O 以 100% 运行,完成写入的时间超过 2 秒,因为多个进程同时写入磁盘。

(仅供参考,所涉及的应用程序是 Informatica PowerCenter)

performance tuning storage-area-network hard-drive

21
推荐指数
3
解决办法
2391
查看次数

kjournald 使用率高的原因

我想弄清楚为什么kjournald我的机器会发疯。这是一个带有大量内存的 8 核盒子。它有大约 50% 的 CPU 负载。

iotop 似乎没有指向任何特定的进程——这里和那里的一些突发写入(主要是 cron 启动,生成的一些监控统计信息等)当我过去sys/vm/block_dump收集写入统计信息时,我得到了这样的列表:

kjournald(1352): 1909
sendmail(28934): 13
cron(28910): 12
cron(28912): 11
munin-node(29015): 3
cron(28913): 3
check_asterisk_(28917): 3
sh(28917): 2
munin-node(29022): 2
munin-node(29021): 2
Run Code Online (Sandbox Code Playgroud)

kjournald行动只是写道。

为什么会这样?我还应该注意什么来限制 kjournald 活动?这似乎与实际编写的内容不成比例。

linux filesystems tuning kjournald

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

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

如何微调我们的 MySQL 服务器?

MySQL 不是我的菜,但我需要微调我们的一台服务器。

以下是要求/规格:

  • MySQL 服务器只有一个重要的数据库
  • 我们只有一种“类型”的应用程序连接到它,同时连接到它的实例并不多:最多 15 个。(这些应用程序是 XMPP 机器人)
  • 这些应用程序具有非阻塞 IO,这意味着它们永远不会在数据库服务器上“等待”并在处理数据库查询时继续处理传入请求。这意味着有时这个应用程序的一个实例可以有几个(很多!)连接到数据库服务器(特别是如果某些查询很慢)
    • 所有查询都使用索引
    • 我们的主机只运行 MySQL。这是一个具有 2GB RAM 的 Xen 实例 (@slicehost)。
    • 我们使用 InnoDB 表是因为我们需要一些基本的事务,但如果这对性能有真正的影响,我们可能会切换到 MyISAM。

由于它现在的配置,我们的 MySQL 服务器慢慢开始吃掉所有可用的内存(我们使用 collectd,这是一个图表)。在某些时候(几天/几周后),它停止执行查询(它在今晚停止了 2 个小时,我不得不重新启动 MySQL 服务器:见第二张图片):

(抱歉,新用户不能发布图片,而且只有 1 个超链接 :/)

这是我们目前的 my.cnf

#
# The MySQL database server configuration file.
#
# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" …
Run Code Online (Sandbox Code Playgroud)

mysql innodb xen tuning performance-monitoring

8
推荐指数
1
解决办法
7219
查看次数

调整 Linux 的 IPv6 堆栈

我正在使用 Linux 网络设备,并且有一些 TCP/IP 设置似乎没有 IPv6 等效项。IP 转发是一种常见设置,可在两个堆栈中使用

net.ipv4.ip_forward
net.ipv6.conf.all.forwarding
Run Code Online (Sandbox Code Playgroud)

但这些是我需要支持 IPv6 的一些设置的例子

net.ipv4.ip_nonlocal_bind
net.ipv4.ip_local_port_range
net.ipv4.tcp_tw_reuse
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
Run Code Online (Sandbox Code Playgroud)

ip_nonlocal_bind 非常关键,并且似乎缺少 TCP TIME_WAIT 套接字的设置。

我可能错过的内核/iproute 文档的指针也很棒。

networking linux tuning ipv6

8
推荐指数
1
解决办法
2080
查看次数