AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-69802

Willem's questions

Martin Hope
Willem
Asked: 2017-02-16 08:03:58 +0800 CST

使 systemd 服务以可用磁盘空间为条件

  • 0

我正在迁移我的新贵 mysql 初始化脚本,该脚本检查是否有 >100MB 可用磁盘空间,如果没有,请休眠 10 秒并重试。

我可以像这样在 systemd 中实现它,但它伤害了我的眼睛。

[Service]
RestartSec=10
Restart=on-failure
ExecStartPre=/bin/bash -c '/usr/bin/test $(($(/usr/bin/stat -f --format="%a*%S/1024/1024" /data))) -gt 100 || (echo Less than 100MB available on /data; /bin/false)'
ExecStart=/usr/sbin/mysqld
TimeoutSec=300

有更清洁的解决方案吗?当可用磁盘空间低于某个阈值时,可能会停止 mysql。我可以制作一个虚拟单元并将其包含在Requires中吗?类似于 Upstart 的start on starting mysql.

systemd
  • 1 个回答
  • 1139 Views
Martin Hope
Willem
Asked: 2015-06-17 00:09:02 +0800 CST

限制 PHP-FPM 内存消耗

  • 0

在我的 php5-fpm/php.ini 我有:

memory_limit = 512M

但是,在处理了一些请求后,ps uxa显示:

root      1130  0.0  0.3 339892  8064 ?        Ss   05:29   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)      
app       1131  0.6 38.9 1383692 798240 ?      S    05:29   0:50 php-fpm: pool www                                         
app       1132  0.7 38.6 1383656 792736 ?      S    05:29   0:57 php-fpm: pool www                                         

798M RSS 远远超出了限制。这怎么可能?我可以在 php-fpm 初始化脚本中设置一个 ulimit,但首先我想了解为什么它目前不起作用。

在 Ubuntu 12.04 LTS 上运行 php5-fpm 5.4.26。

更新感谢 OMG-1 在下面的回答,我让它在 php-fpm.conf 中使用这一行工作。

php_admin_value[memory_limit] = 256M

注意:将 php.ini 更新为 256M 确实会根据 更新值phpinfo(),但不会更新行为(即使在重新启动后)——我仍然能够使用下面的脚本分配 500M。很明显是PHP中的一个错误。

这是我的测试脚本,(谢谢你)。

<pre>
<?php 

error_reporting(E_ALL);
ini_set('display_errors', 'on');

function tryAlloc($megabyte){
    echo "try allocating {$megabyte} megabyte...";
    $dummy = str_repeat("-",1048576*$megabyte);
    echo "pass.";
    echo "Usage: " . memory_get_usage(true)/1048576; 
    echo " Peak: " . memory_get_peak_usage(true)/1048576;
    echo "\n";
}   
for($i=10;$i<1000;$i+=50){
    $limit = $i.'M';
    ini_set('memory_limit', $limit); 
    echo "set memory_limit to {$limit}\n"; 
    echo "memory limit is ". ini_get("memory_limit")."\n";
    tryAlloc($i-10);
}

?>
</pre>
php-fpm
  • 1 个回答
  • 21047 Views
Martin Hope
Willem
Asked: 2015-02-21 05:09:03 +0800 CST

用于更新简单 XML 文件的 CLI 命令

  • 2

我想以编程方式更新一个非常简单的 XML 配置文件中的字符串,例如:

<?xml version="1.0"?>
<x>
    <z>should be changed</z>
</x>
<y>
    <z>should NOT be changed</z>
</y>

是否存在将更新 x/z 而不是 y/z 的简单 CLI 命令?也许使用 XPath 选择器参数,例如:

$ xml-update myfile.xml /x/z "my new string"

我可以用 Perl 或 Python 写一些东西,但考虑到这个问题的简单性,我想肯定有一个聪明的 Unix 实用程序已经可以做到这一点。

更新:我发现了这个,但它似乎有点矫枉过正。而且我必须先学习 XSLT。http://developerblog.redhat.com/2013/12/05/xml-editing-bash-script/

linux
  • 1 个回答
  • 3662 Views
Martin Hope
Willem
Asked: 2014-07-01 03:47:45 +0800 CST

tcpdump:“以太类型未知”?

  • 5

在调试 DNS 问题(显然 UDP 数据包在网络上丢失)时,我偶然发现了许多(但不是全部)“ethertype Unknown”消息,如下所示。Tcpdump 使用“-n -i any port 53”运行

17:34:43.826196 IP 127.0.0.1.46508 > 127.0.0.1.53: 57861+ A? collector-123.newrelic.com. (44) 17:34:43.826221 IP 127.0.0.1.46508 > 127.0.0.1.53: 20016+ AAAA? collector-123.newrelic.com. (44) 17:34:43.826314 IP 127.0.0.1.53 > 127.0.0.1.46508: 57861 1/0/0 A 50.31.164.223 (60) 17:34:43.826505 IP 82.94.181.250.38280 > 208.78.70.21.53: 4554 AAAA? collector-123.newrelic.com. (44) 17:34:43.826510 Out 00:25:90:4b:94:dc ethertype Unknown (0x0067), length 92: 0x0000: 0000 0800 4500 0048 ef3d 4000 4011 2cab ....E..H.=@.@.,. 0x0010: 525e b5fa d04e 4615 9588 0035 0034 1f02 R^...NF....5.4.. 0x0020: 11ca 0000 0001 0000 0000 0000 0d63 6f6c .............col 0x0030: 6c65 6374 6f72 2d31 3233 086e 6577 7265 lector-123.newre 0x0040: 6c69 6303 636f 6d00 001c 0001 lic.com..... 17:34:43.826512 Out 00:25:90:4b:94:dc ethertype Unknown (0x0067), length 92: 0x0000: 0000 0800 4500 0048 ef3d 4000 4011 2cab ....E..H.=@.@.,. 0x0010: 525e b5fa d04e 4615 9588 0035 0034 1f02 R^...NF....5.4.. 0x0020: 11ca 0000 0001 0000 0000 0000 0d63 6f6c .............col 0x0030: 6c65 6374 6f72 2d31 3233 086e 6577 7265 lector-123.newre 0x0040: 6c69 6303 636f 6d00 001c 0001 lic.com..... 17:34:43.828629 In 00:1e:13:c1:52:00 ethertype Unknown (0x0067), length 159: 0x0000: 0000 0800 4500 008b b1dd 0000 3611 b3c8 ....E.......6... 0x0010: d04e 4615 525e b5fa 0035 9588 0077 8a5a .NF.R^...5...w.Z 0x0020: 11ca 8400 0001 0000 0001 0000 0d63 6f6c .............col 0x0030: 6c65 6374 6f72 2d31 3233 086e 6577 7265 lector-123.newre 0x0040: 6c69 6303 636f 6d00 001c 0001 c01a 0006 lic.com......... 0x0050: 0001 0000 0e10 0037 036e 7331 0370 3231 .......7.ns1.p21 0x0060: 0664 796e 6563 7403 6e65 7400 0c64 6f6d .dynect.net..dom 0x0070: 6169 6e2d 6164 6d69 6ec0 1a00 0002 3400 ain-admin.....4. 0x0080: 000e 1000 0002 5800 093a 8000 000e 10 ......X..:.....

什么会导致这些?它可能与硬件卸载到网卡有关吗?它有害吗?

linux
  • 1 个回答
  • 9432 Views
Martin Hope
Willem
Asked: 2014-01-19 02:13:38 +0800 CST

配置管理:基于推与拉的拓扑

  • 24

更成熟的配置管理 (CM) 系统(如 Puppet 和 Chef)使用基于拉取的方法:客户端定期轮询集中式 master 以获取更新。其中一些也提供无主方法(因此,基于推送),但声明它“不适用于生产”(Saltstack)或“可扩展性较差”(Puppet)。我所知道的唯一从一开始就基于推送的系统是亚军 Ansible。

基于拉的系统的特定可扩展性优势是什么?为什么据说添加更多的 pull-masters 比 push-agents 更容易?

例如,agiletesting.blogspot.nl写道:

在“拉”系统中,客户端彼此独立地联系服务器,因此整个系统比“推”系统更具可扩展性

另一方面,Rackspace 证明他们可以使用基于推送的模型处理 15K 系统。

infastructures.org写道:

我们发誓使用诸如 SUP、CVSup、rsync 服务器或 cfengine 之类的工具来维护基础设施的拉式方法。与其将更改推送给客户端,每个单独的客户端计算机需要负责在启动时轮询黄金服务器,并在之后定期轮询,以保持其自己的转速水平。在采用这种观点之前,我们开发了基于 ssh、rsh、rcp 和 rdist 的大量基于推送的脚本。我们在 r-commands(或 ssh)中发现的问题是:当您运行基于 r-command 的脚本将更改推送到目标机器时,如果您有超过 30 个目标主机,其中一个可能会在任何给定的时间下来。维护委托机器的列表成为一场噩梦。在编写代码来纠正这个问题的过程中,您最终会得到精心制作的包装代码来处理:死主机超时;记录和重试死主机;分叉和运行并行作业以尝试在合理的时间内访问许多主机;最后检测并防止使用所有出站 rsh 会话的源计算机上所有可用 TCP 套接字的情况。然后,您仍然会遇到问题,即要将您刚才所做的任何事情放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。分叉和运行并行作业以尝试在合理的时间内访问许多主机;最后检测并防止使用所有出站 rsh 会话的源计算机上所有可用 TCP 套接字的情况。然后,您仍然会遇到问题,即要将您刚才所做的任何事情放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。分叉和运行并行作业以尝试在合理的时间内访问许多主机;最后检测并防止使用所有出站 rsh 会话的源计算机上所有可用 TCP 套接字的情况。然后,您仍然会遇到问题,即要将您刚才所做的任何事情放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。最后检测并防止使用所有出站 rsh 会话的源计算机上所有可用 TCP 套接字的情况。然后,您仍然会遇到问题,即要将您刚才所做的任何事情放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。最后检测并防止使用所有出站 rsh 会话的源计算机上所有可用 TCP 套接字的情况。然后,您仍然会遇到问题,即要将您刚才所做的任何事情放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。然后,您仍然会遇到问题,将您刚才所做的任何事情都放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。然后,您仍然会遇到问题,即要将您刚才所做的任何事情放入安装映像中,以便将来安装所有新主机,以及对任何死机且明天必须重建的主机重复此操作。在我们经历了实现基于 r-command 的复制的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r 命令或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉的方法。或与此相关的任何其他推送机制。它们的扩展性不如基于拉的方法。或与此相关的任何其他推送机制。它们的扩展性不如基于拉的方法。

这不是实现问题而不是架构问题吗?为什么编写线程推送客户端比编写线程拉服务器更难?

puppet
  • 3 个回答
  • 20161 Views
Martin Hope
Willem
Asked: 2013-08-22 04:26:16 +0800 CST

Linux:强制数据包的源地址到本地绑定的 IP

  • 3

我有 10.1.1.1 和 10.2.2.2 绑定到 eth0。

# ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 04:01:05:ff:42:01 brd ff:ff:ff:ff:ff:ff
    inet 10.2.2.2/24 brd 10.2.2.255 scope global eth0
    inet 10.1.1.1/32 scope global eth0
    inet6 fe80::601:5ff:feff:4201/64 scope link 
       valid_lft forever preferred_lft forever
# ip route get 10.1.1.1
local 10.1.1.1 dev lo  src 10.1.1.1 

问题A:为什么IP绑定eth0时使用“dev lo”?

我想强制到 10.1.1.1 的本地连接具有 10.2.2.2 的源地址。所以我尝试:

# ip route add 10.1.1.1/32 dev eth0 src 10.2.2.2
# ip route show
default via 10.2.2.1 dev eth0 
10.1.1.1 dev eth0  scope link  src 10.2.2.2 
10.2.2.0/24 dev eth0  proto kernel  scope link  src 10.2.2.2 
# ip route get 10.1.1.1
local 10.1.1.1 dev lo  src 10.1.1.1 

问题 B:如何覆盖这个奇怪的“本地”路由?

背景:数据包被 IPVS 内核子系统拦截。在它到达那里之前,我需要正确的源地址,否则 IPVS 不知道如何处理它。使用 iptables 进行 SNAT 不起作用,因为这发生在 POSTROUTING 阶段,而 IPVS 会跳过它。另请参阅我在Linux IPVS in DR mode 上的相关问题:VIP unreachable for director

谢谢!

linux
  • 1 个回答
  • 2211 Views
Martin Hope
Willem
Asked: 2013-04-17 01:39:16 +0800 CST

如何远程串流记录MySQL binlog

  • 1

为了数据冗余的目标,我想在一个中心位置记录几百台 mysql 服务器的 binlog。为每个流运行一个完整的复制器将需要大量资源(多个服务器),因为语句的执行需要大量的 cpu。我的假设是仅记录二进制日志将占用更少的资源。

怎么做?我找到了http://search.cpan.org/~alfie/MySQL-Replication-0.0.2/bin/MySQLReplicationClient.pl但它似乎使用了非本地复制(它需要一个额外的数据库)并且似乎处于 alpha 阶段状态。

也许另一种解决方案是安装一个完整的 mysql 服务器作为复制从属服务器,但以某种方式禁用复制语句的执行并只记录它们。

谢谢!

mysql
  • 1 个回答
  • 4914 Views
Martin Hope
Willem
Asked: 2013-02-04 13:45:16 +0800 CST

欺骗性 DDoS 保护策略,过滤窗口大小 == 0?

  • 2

我被 SYN 洪水击中,几乎杀死了我的 ipvs 负载均衡器的网络堆栈(80K 数据包/秒)。“ksoftirqd”进程占用了 100% 的 CPU,机器几乎无法响应网络。tcpdump 显示如下数据包:

21:24:40.994920 IP 193.41.136.187.17435 > MY-IP.80: Flags [S], seq 3387555840, win 0, length 0
21:24:40.994940 IP 46.159.109.102.63863 > MY-IP.80: Flags [S], seq 4209573888, win 0, length 0
21:24:40.994961 IP 32.199.104.48.30346 > MY-IP.80: Flags [S], seq 512360448, win 0, length 0

除了零窗口大小外,我在洪水中找不到共同点,这可能是过滤的一个钩子。

  1. ksoftirqd 确实是瓶颈吗?
  2. 有没有办法在 linux box 到达 ksoftirqd bottelenck 之前对其进行过滤?
  3. 如果不是,我如何在我的 Cisco 6509 上过滤窗口大小 == 0?

谢谢!

linux
  • 1 个回答
  • 1022 Views
Martin Hope
Willem
Asked: 2012-10-20 02:30:21 +0800 CST

Linux:防止传出 TCP 泛洪

  • 9

我在负载均衡器后面运行数百个网络服务器,托管许多具有大量应用程序(我无法控制)的不同站点。大约每个月一次,其中一个网站遭到黑客攻击,并上传洪水脚本来攻击某些银行或政治机构。过去,这些都是 UDP 泛洪,通过阻止单个网络服务器上的传出 UDP 流量得到有效解决。昨天,他们开始从我们的服务器使用大量到端口 80 的 TCP 连接向一家大型美国银行发起洪水攻击。由于这些类型的连接对我们的应用程序来说是完全有效的,因此仅仅阻止它们并不是一个可接受的解决方案。

我正在考虑以下替代方案。你会推荐哪一个?你有没有实施这些,如何实施的?

  • 限制源端口为 != 80 的网络服务器 (iptables) 传出 TCP 数据包
  • 相同但有排队 (tc)
  • 速率限制每个服务器每个用户的传出流量。相当大的管理负担,因为每个应用程序服务器可能有 1000 个不同的用户。也许是这样:我怎样才能限制每个用户的带宽?
  • 还要别的吗?

当然,我也在研究如何最大限度地减少黑客进入我们托管网站之一的机会,但由于该机制永远不会 100% 防水,我想严格限制入侵的影响。

更新:我目前正在使用这些规则进行测试,这可以防止这种特定的攻击。你会如何建议使它们更通用?当我只对 SYN 数据包进行速率限制时,我是否错过了已知的 TCP DoS 攻击?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset

干杯!

linux
  • 2 个回答
  • 3598 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve