我正在尝试将一些stream量规则引入到我的Linux passthrough服务器中,以便为以下内容提供更好的QoS: 1)低端口stream量开箱(networkingstream量和邮件等)。 2)端口stream量低 – 特别是端口webpipe理(80)和SSH(22)。 3)最后放置文件共享优先级。 即所有其他stream量。 我已经调整了一个shell脚本来使用tc和htb来设置一些基本的规则: #!/bin/bash UPLINK=7000 DOWNLINK=500 tc qdisc del dev eth0 root 2> /dev/null > /dev/null tc qdisc del dev eth1 root 2> /dev/null > /dev/null ip link set dev eth0 qlen 30 2> /dev/null > /dev/null ip link set dev eth0 mtu 576 2> /dev/null > /dev/null # […]
数据包如何从networking接口队列调度到CPU,然后再转发到线程进行处理? 什么需要考虑到如何在队列,硬件中断vs softirqs,CPU /内存/应用程序/线程局部性,multithreading与多进程守护进程中散列数据包,以避免尽可能多的数据包重新计划/复制尽可能? 我有一个使用Linux 2.6.32(yes,old)的Debian amd64上运行16个本地线程的multithreadingnetworking守护进程(比如Unbound resolver),因此应用程序负载分布在16个CPU上。 网卡是bnx2(BCM5709S),支持8个MSI-X rx / tx队列。 每个队列的IRQ通过在/ proc / irq / n / smp_affinity中静态映射中断关联被分配给一个单独的CPU(irqbalance从来没有做好),队列哈希types(RSStypes)是默认的(src + dst ,TCP sport + dport),使用默认的散列键。 所有这些都有助于传播负载,但不是平均的:通常有一个应用程序线程执行两倍于其他线程的工作(=每秒请求数),一个CPU(可能是处理该特定线程的CPU)的softirq速率是其他线程的两倍的CPU。 CPU已经启用了超线程,但是我还没有做任何事情来传播负载到'真正'的核心(我真的应该)。 Linux提供了一个相当全面的networking缩放文档 ,但我错过了一些空白: 该文件说这关于RSSconfiguration: 如果设备支持足够的队列,则典型的RSSconfiguration将是每个CPU具有一个接收队列,否则对于每个存储器域至less一个接收队列,其中存储器域是共享特定存储器级别的一组CPU(L1,L2 ,NUMA节点等)。 问:如何确定我的服务器的CPU /caching/内存域configuration? 有关接收stream量转向(RFS)的信息似乎回答了一些关于将数据包传送到正确的CPU /线程的问题: RFS的目标是通过将数据包的内核处理引导到消耗数据包的应用程序线程正在运行的CPU来增加datacache hitrate。 问:在DNSparsing的情况下,通常有一个查询包和一个应答包。 使用multithreading守护进程,只有一个线程运行bind()+ recvfrom(),因此在将工作调度到其他线程之前,必须处理所有新的传入数据包? 这个特殊用例会从分叉操作中受益吗(每个CPU有一个进程)呢? 问:接收stream量转向后,通常最适用于multithreadingTCP守护进程? 问:你将如何确定是否进行multithreading或多进程操作? 显然有共享内存和数据结构,资源争夺等,但我在考虑包stream和应用程序监听器。 问:如果没有接收stream量转向或简单的UDP服务,数据包是否能到达“错误的”CPU,因此会被重新安排到“正确的”CPU? 这会触发一个NET_RX softirq? 问:NIC队列和CPU之间是否有NET_RX softirq? CPU和侦听线程/进程之间是否还有一个? 如果接收线程将数据包安排到工作线程,是否还有另外一个可能性? 太糟糕了,Ben Hutchings的netconf […]
在客户站点中,networking团队在客户端和服务器之间添加了防火墙。 大约40分钟的空闲时间后,这会导致空闲连接断开。 networking人士说,防火墙没有任何空闲的连接超时,但事实是空闲的连接被打破。 为了解决这个问题,我们首先configuration了tcp_keepalive_time = 300,tcp_keepalive_intvl = 300和tcp_keepalive_probes = 30000的TCP keepalive服务器(一台Linux机器)。 这是有效的,连接可以持续数天或更长时间。 但是,我们也希望服务器检测到死的客户端并终止连接,所以我们将设置更改为time = 300,intvl = 180,probes = 10,认为如果客户端确实存在,服务器会每隔300s (5分钟),并且客户端将以ACK进行响应,并且防止防火墙将其视为空闲连接并将其消除。 如果客户端死了,10次探测之后,服务器将中止连接。 令我们吃惊的是,这些空闲而又活跃的联系人在大约40分钟后就像以前一样死亡。 运行在客户端上的Wireshark在服务器和客户端之间根本不显示任何keepalive,即使在服务器上启用keepalive也是如此。 这里会发生什么? 如果服务器上的keepalive设置是time = 300,intvl = 180,probes = 10,我认为如果客户端处于活动状态但空闲,服务器将每隔300秒发送一次keepalive探针,客户端已经死了,它会在300秒后发送一个,然后每隔180秒再发送9个探测器,然后再杀死连接。 我对吗? 一种可能性是防火墙以某种方式拦截来自服务器的keepalive探测器,并且无法将它们传递给客户端,并且获得探测器的事实使得认为连接处于活动状态。 这是防火墙的常见行为吗? 我们不知道涉及哪种防火墙。 服务器是Teradata节点,连接是从Teradata客户端实用程序到服务器端的端口1025的数据库服务器,但我们已经看到与SSH连接相同的问题,所以我们认为它会影响所有TCP连接。
我使用的是Ubuntu 14.10。 我刚安装systemd,我有一个失败的服务, proc-sys-fs-binfmt_misc.automount 。 我在这里看到这是systemd的一部分: 这个文件很重要吗? 我如何解决激活问题? systemctl status的输出: svassaux@vps127101:~$ systemctl status proc-sys-fs-binfmt_misc.automount -> '/org/freedesktop/systemd1/unit/proc_2dsys_2dfs_2dbinfmt_5fmisc_2eautomount' proc-sys-fs-binfmt_misc.automount – Arbitrary Executable File Formats File System Automount Point Loaded: loaded (/lib/systemd/system/proc-sys-fs-binfmt_misc.automount; static) Active: failed (Result: resources) Where: /proc/sys/fs/binfmt_misc Docs: https://www.kernel.org/doc/Documentation/binfmt_misc.txt http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems 编辑:我的单位档案: # This file is part of systemd. # # systemd is free software; you can […]
我试图Kerberize一个Apache服务器,并允许创build的服务器主体login到Active Directory。 我已经在网上提供了众多的教程之一,它似乎工作正常。 我在项目的Linux方面,企业IT在Windows方面。 IT为我提供了一个服务帐户和一个服务负责人。 在这个例子中,我将它称为HTTP/[email protected]。 他们为我提供了一个keytab文件,用于在AD服务器上运行一个名为ktpass.exe的工具。 我已经validation了AD / KDC的KVNO和keytab文件相匹配。 一切都很好。 主机名有一个合适的DNS Alogging,IP有合适的PTRlogging。 两台服务器都在同步。 我可以通过发行的keytab文件从AD / KDC申请上述服务主体的票据,如下所示: kinit -k -t http.keytab HTTP/[email protected] 这工作。 我获得一张票,我可以使用这张票来查询AD / LDAP目录。 keytab对于运行单点loginApache站点也很有效,这是本练习的目标之一。 半个小时过去了。 尝试使用上述kinit命令login失败,并显示以下消息: Client not found in Kerberos database 我无法validation服务主体,就好像委托人在AD服务器上被删除一样。 现在它变得很奇怪,至less对我来说: 通过请求,ADpipe理员再次运行ktpass.exe工具,为我的服务构build一个新的keytab文件。 KVNO(密钥版本号)在服务器上递增,导致我们的Apachetesting服务器停止validationKerberos单点login。 这与我目前的configuration预计。 令我们惊讶的是,现在kinit命令再次运行。 我们又买了半个小时,然后又停了下来。 我们的IT部门在这里处于亏损状态,他们猜测这是AD服务器本身的一个问题。 我想这是configuration,但据他们说,在他们的设置任何地方都没有半小时的限制。 我遵循http://www.grolmsnet.de/kerbtut/ (请参阅第7节),但是在我find的所有文档中,这个方法似乎是一样的。 我没有发现任何提及服务负责人的时间限制。 编辑:这似乎是一个复制问题。 虽然在复制过程中没有报告错误,但服务帐户的SPN值是从“HTTP/[email protected]”更改(恢复?)“[email protected] “30分钟后。
我试图将两个挂载点聚合到一个目录中,以便将来自两个目录的文件合并到一个挂载点中。 我正在使用overlayfs做一些testing,并且已经能够创build合并的挂载点,但是当我从这个合并的目录中删除文件时,问题就出现了。 据我所知,overlayfs有一个较低和较低的文件系统,如果你从下面删除了一些东西,它会在上层文件系统上创build一个“whiteout”,基本上只是把文件从下面的文件从“shiny的”文件隐藏到合并的层。 该文件仍占用较低文件系统上的空间; 它只是没有提供可用。 我的问题是:如何从上下文件系统中删除文件并回收已删除文件使用的空间,而不是只隐藏它? 我可以从合并的目录中手动删除文件,然后从较低的目录中删除文件(这是一件坏事吗?)但是df -ha仍然显示合并目录占用空间: none 6.8G 1.9G 4.6G 30% /var/www/merged /dev/loop0 380M 2.3M 354M 1% /mnt/lower1 /dev/loop1 380M 2.3M 354M 1% /mnt/lower2 /dev/loop2 380M 2.3M 354M 1% /mnt/upper none 380M 2.3M 354M 1% /mnt/merged 从overlayfs文件系统中删除文件并正确报告准确的磁盘使用情况的正确方法是什么?
(从SO移动) 我有保护SIP服务器的iptables。 它阻止除了我专门打开的IP以外的所有IP,而且似乎几乎适用于所有人。 我已经从很多不是白名单的IP地址进行testing,他们都应该放弃。 但是,我拿起了一个似乎能够绕过iptables规则的“黑客”。 他的调查邀请通过,我不知道如何,甚至可能。 在十年之内,我还没有见过这个。 我想这一定是我所做的,但是我看不见。 这样创build的iptables(在顶部定义了MYIP – redacted): iptables -F iptables -X iptables -N ALLOWEDSIP iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -d $MYIP –dport 22 […]
在我的研究小组中,我们最近将我们的机器上的操作系统从Red Hat 6.2升级到了Debian 8.3,并且观察到我们机器之间通过集成的Intel 1G NIC的TCP往返时间从110μs增加到220μs。 起初,我认为这是一个configuration问题,所以我将所有的sysctlconfiguration(例如tcp_low_latency=1 )从未升级的Red Hat机器复制到Debian机器,并没有解决问题。 接下来,我认为这可能是一个Linux分发问题,并在机器上安装了Red Hat 7.2,但往返时间保持在220μs左右。 最后,我认为可能是Linux内核版本问题,因为Debian 8.3和Red Hat 7.2都使用内核3.x,而Red Hat 6.2使用内核2.6。 所以为了testing这个,我安装了Debian 6.0 Linux内核2.6和宾果! 时间又在110微秒。 其他人也在最新版本的Linux中经历了这些更高的延迟,并且有已知的解决方法吗? 最小工作示例 下面是一个C ++应用程序,可用于基准延迟。 它通过发送消息,等待响应,然后发送下一个消息来测量延迟。 它用100字节的消息完成了这个100,000次。 因此,我们可以将客户的执行时间除以100,000来获得往返延迟。 要使用这个首先编译程序: g++ -o socketpingpong -O3 -std=c++0x Server.cpp 接下来在主机上运行应用程序的服务器端版本(比如192.168.0.101)。 我们指定IP以确保我们在一个知名的界面上托pipe。 socketpingpong 192.168.0.101 然后使用Unix工具time来测量客户端的执行时间。 time socketpingpong 192.168.0.101 client 在两个具有相同硬件的Debian 8.3主机之间运行这个实验会得出以下结果。 real 0m22.743s user 0m0.124s sys 0m1.992s Debian 6.0的结果是 […]
设置: 2 or more nginx machines each machine has the same virtual hosts traffic is load balanced via DNS to each machine 我需要弄清楚什么是最好的工具来获得一些stream量统计,主要是感兴趣的点击量和总stream量以千兆字节为单位。 显然,日志信息将来自nginx,格式如下: log_format main '$remote_addr $host $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"';
Ubuntu的内存不足杀手肆虐我的服务器,悄悄暗杀我的应用程序,sendmail,Apache等。 我已经设法了解OOM杀手是什么,以及它的“坏”规则。 虽然我的机器很小,我的应用程序甚至更小,通常只有一半的物理内存在使用,更不用说交换空间了,所以我很惊讶。 我试图找出罪魁祸首,但我不知道如何阅读OOM杀手日志。 任何人都可以请教我关于如何阅读日志中的数据(什么是ve , free和gen ?),还是帮我parsing这些日志? Apr 20 20:03:27 EL135 kernel: kill_signal(13516.0): selecting to kill, queued 0, seq 1, exc 2326 0 goal 2326 0… Apr 20 20:03:27 EL135 kernel: kill_signal(13516.0): task ebb0c6f0, thg d33a1b00, sig 1 Apr 20 20:03:27 EL135 kernel: kill_signal(13516.0): selected 1, signalled 1, queued 1, seq 1, exc 2326 […]