小编Ale*_*ysh的帖子

如何减少 TIME_WAIT 中的套接字数量?

Ubuntu 服务器 10.04.1 x86

我有一台在 nginx 后面带有 FCGI HTTP 服务的机器,它为许多不同的客户端提供许多小的 HTTP 请求。(高峰时段每秒大约 230 个请求,平均响应大小为 650 字节,每天有数百万个不同的客户端。)

结果,我有很多套接字,挂在 TIME_WAIT 中(使用下面的 TCP 设置捕获图表):

时间的等待

我想减少套接字的数量。

除了这个我还能做什么?

$ cat /proc/sys/net/ipv4/tcp_fin_timeout
1
$ cat /proc/sys/net/ipv4/tcp_tw_recycle
1
$ cat /proc/sys/net/ipv4/tcp_tw_reuse
1

更新:有关机器上实际服务布局的一些详细信息:

客户端-----TCP-socket--> nginx(负载均衡器反向代理) 
       -----TCP-socket--> nginx (worker) 
       --domain-socket--> fcgi-software
                          --single-persistent-TCP-socket--> Redis
                          --single-persistent-TCP-socket--> MySQL (其他机器)

我可能应该切换负载平衡器 --> 工作线程连接到域套接字,但关于 TIME_WAIT 套接字的问题仍然存在——我计划很快在单独的机器上添加第二个工作线程。在这种情况下将无法使用域套接字。

ubuntu nginx linux-networking high-load

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

nginx:转储 HTTP 请求以进行调试

  • Ubuntu 10.04.2
  • nginx 0.7.65

我看到一些奇怪的 HTTP 请求来到我的 nginx 服务器。

为了更好地了解发生了什么,我想转储此类查询的整个 HTTP 请求数据。(即,将所有请求标头和正文转储到我可以阅读的地方。)

我可以用 nginx 做到这一点吗?或者,是否有一些 HTTP 服务器允许我开箱即用,我可以通过 nginx 代理这些请求?

更新:请注意,此框有大量正常流量,我想避免在低级别(例如,使用tcpdump)捕获所有流量并稍后将其过滤掉。

我认为首先在重写规则中过滤良好的流量会容易得多(幸运的是,在这种情况下我可以很容易地编写一个),然后只处理虚假流量。

而且我不想将虚假流量引导到另一个盒子,只是为了能够在那里使用tcpdump.

更新 2:为了提供更多详细信息,虚假请求foo在其 GET 查询中具有命名(例如)参数(参数的值可能不同)。好的请求保证永远不会有这个参数。

如果我可以通过它tcpdumpngrep以某种方式过滤- 没问题,我会使用这些。

ubuntu http nginx

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

SSH 的“虚拟主机”

我们有一个远程 Xen 服务器,运行着很多来宾机器(在 Linux 上),只有几个 IP 可用。

每个来宾机器都应该可以通过 SSH 从外部直接访问。

现在我们为每台访客机器分配一个单独的域名,指向少数可用 IP 之一。我们还为那台访客机器分配了一个端口号。

因此,要访问名为 m​​achine 的机器foo,应执行以下操作:

$ ssh foo.example.com -p 12345

...并访问名为的机器bar

$ ssh bar.example.com -p 12346

双方foo.example.combar.example.com指向同一个IP。

是否有可能以某种方式摆脱此配置中的自定义端口并配置 SSH 服务器,侦听该 IP(或防火墙或服务器端的任何内容),以便根据域地址将传入连接路由到正确的来宾计算机,以便以下按预期工作?

$ ssh foo.example.com 主机名 # 打印 foo
$ ssh bar.example.com 主机名 # 打印栏

请注意,我确实了解.ssh/config相关的客户端配置解决方案,我们现在正在使用它。这个问题专门针对零客户端配置解决方案。

linux ssh

14
推荐指数
1
解决办法
8901
查看次数

CPU0 被 eth1 中断淹没

我有一个 Ubuntu VM,在基于 Ubuntu 的 Xen XCP 中运行。它托管基于 FCGI 的自定义 HTTP 服务,位于nginx.

下从负载ab 第一CPU芯饱和,其余为欠载。

/proc/interrupts我看来,CPU0 提供的中断比任何其他内核都多一个数量级。他们中的大多数来自eth1.

我可以做些什么来提高此 VM 的性能?有没有办法更均衡地平衡中断?


血腥细节:

$ uname -a
Linux MYHOST 2.6.38-15-virtual #59-Ubuntu SMP Fri Apr 27 16:40:18 UTC 2012 i686 i686 i386 GNU/Linux

$ lsb_release -a
没有可用的 LSB 模块。
分销商 ID: Ubuntu
描述:Ubuntu 11.04
发布:11.04
代号:natty

$ cat /proc/interrupts 
           CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7       
283:113720624 0 0 0 0 0 0 0 xen-dyn-event …

linux ubuntu performance-tuning interrupts high-load

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

确保持续集成服务“干净的系统”的有效方法

我们想为我们的项目设置持续集成 (CI) 服务。CI 服务应该控制项目生命周期的所有方面,包括部署。

也就是说,我们希望在每次迭代时都有一个 CI 代理采用一个干净的系统(特别是 Ubuntu Server),在那里部署我们的项目并运行测试。

我们可能会从头开始自己编写 CI 服务,因为我们的生态系统相当不寻常。问题是:如何为每次 CI 迭代有效地提供全新的系统?

项目部署安装一些 Debian 包,配置几个 nginx 站点,并在系统范围内在特定于实现语言的包管理器 (LuaRocks) 中安装一些包。没有什么比这更具侵入性的了(我相信)。因此,与确保绝对隔离和清洁相比,能够快速设置干净的状态(在现代硬件上在一分钟内,更快——更好)更重要。

我看到了两种方法来做我们需要的事情:

  • 要么建立某种监狱(比如 lxc,也许)。
  • 或者安装一些可以做快照的虚拟机,并使用它们。

但在这一点上,我没有足够的信息来决定。

你有什么建议?还有其他选择吗?有具体的工具名称吗?

注意:CI 服务将在 Citrix XenServer 来宾中运行。如果价格合理,付费解决方案是可以的。(通常他们在这个领域是不合理的。)远程 CI 解决方案不行。

virtualization linux ubuntu continuous-integration

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

如何使用 Docker 配置自定义 DNS 服务器?

我需要添加几行来/etc/hosts让我的 web 应用程序在 Docker 容器中工作。

Docker/etc/hosts是只读的。

我正在尝试使用 dnsmasq:

从 ubuntu:14.04
# ...
运行 apt-get install -y -q dnsmasq
运行 echo 'listen-address=127.0.0.1' >> /etc/dnsmasq.conf
运行 echo 'resolv-file=/etc/resolv.dnsmasq.conf' >> /etc/dnsmasq.conf
运行 echo 'conf-dir=/etc/dnsmasq.d' >> /etc/dnsmasq.conf
运行 echo 'user=root' >> /etc/dnsmasq.conf
运行 echo 'nameserver 8.8.8.8' >> /etc/resolv.dnsmasq.conf
运行 echo 'nameserver 8.8.4.4' >> /etc/resolv.dnsmasq.conf
运行 echo 'address="/mydomain/127.0.6.1"' >> /etc/dnsmasq.d/0hosts
运行服务 dnsmasq 启动

但是,我无法让 Docker 使用我的 DNS 服务器:

$ docker --dns=127.0.0.1 运行 my/container cat /etc/resolv.conf
名称服务器 8.8.8.8
名称服务器 8.8.4.4

我错过了什么?

配置: …

domain-name-system mac-osx docker

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

轮换愚蠢的非交互式应用程序的日志

Ubuntu 10.4 服务器。

我有一个愚蠢的非交互式遗留服务,它在我的服务器上不断运行。

它正在将其日志写入具有固定名称的文件 (/var/log/something.log)。

它不处理任何释放日志文件的信号。我需要轮换那个日志文件。

有没有办法在不更改应用程序且不丢失日志中的任何数据的情况下正确执行此操作?

linux log-files logrotate

8
推荐指数
2
解决办法
4864
查看次数

传入文件的循环

一堆具有唯一文件名的新文件定期在一台服务器上“出现” 1。(就像每天数百 GB 的新数据一样,解决方案应该可扩展到 TB。每个文件都有几兆字节大,最多几十兆字节。)

有几台机器可以处理这些文件。(十个,解决方案应该可以扩展到数百个。)应该可以轻松添加和删​​除新机器。

有备份文件存储服务器,必须在其上复制每个传入文件以进行存档存储。数据不能丢失,所有传入的文件必须最终交付到备份存储服务器上。

每个传入的文件都被传送到单个机器进行处理,并且应该复制到备份存储服务器。

接收服务器在发送文件后不需要存储文件。

请建议一个强大的解决方案,以上述方式分发文件。解决方案不得基于 Java。Unix 方式的解决方案是可取的。

服务器基于 Ubuntu,位于同一个数据中心。所有其他事情都可以根据解决方案要求进行调整。


1请注意,我有意省略了有关文件传输到文件系统的方式的信息。原因是第三方现在通过几种不同的传统方式发送文件(奇怪的是,通过 scp 和 ØMQ)。在文件系统级别削减跨集群接口似乎更容易,但如果一个或另一个解决方案实际上需要一些特定的传输 - 传统传输可以升级到那个。

cluster storage

8
推荐指数
2
解决办法
478
查看次数

如何在启动时强制 s3fs 挂载

我在 Ubuntu 9.10 x86 上使用s3fs 1.33。

我使用以下命令手动安装它:

sudo /usr/bin/s3fs mybucket /mnt/s3/mybucket -ouse_cache=/tmp
Run Code Online (Sandbox Code Playgroud)

如何在启动时强制安装?

我想我必须写点东西给/etc/fstab. 但是什么?以及如何在不重新启动服务器的情况下对其进行测试?

ubuntu fuse amazon-s3 s3fs

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

SSH 在接受密钥时关闭连接

在服务器的auth.log

来自 MYIP 端口 61313 ssh2 的 agladysh 公钥失败

ssh -vvv

debug1:提供公钥:/Users/agladysh/.ssh/id_rsa
调试 3:send_pubkey_test
debug2:我们发送了一个公钥包,等待回复
debug1:服务器接受密钥:pkalg ssh-rsa blen 277
debug2: input_userauth_pk_ok: fp 指纹
debug3:sign_and_send_pubkey
服务器拒绝连接

我对authorized_keys.

我还检查了:

  • 我的 IP 的 hosts.deny 文件
  • SSH 配置中的 AllowUsers
  • 我在服务器上的默认 shell

任何提示如何调试?

服务器:Ubuntu Server 11.04,客户端:Ubuntu 10.10(密钥从 OS X 转发,适用于其他服务器)。

linux troubleshooting ssh

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