一些网络事实的木偶因此缓慢

时间:2012-04-12 12:23:51

标签: ruby performance puppet vagrant facter

我正在了解vagrantpuppet。 当我使用vagrant33(Ubuntu 10.04)时,木偶似乎很慢。 我修复了fqdn问题(question 7780322),但它仍然很慢。

我已将(部分)问题追溯到其中。要求ipaddress非常快,但ipaddress_eth0需要20秒:

root@a:/# time facter ipaddress
10.0.2.15

real    0m0.031s
user    0m0.024s
sys     0m0.004s
root@a:/# time facter ipaddress_eth0
10.0.2.15

real    0m20.126s
user    0m0.080s
sys     0m0.020s
root@a:/# 

寻找ipaddress_lo也很慢。

任何人都可以帮我解决一下如何调试这个问题的解决方案或建议吗?我是Ruby的新手,但愿意学习。

感谢。

2 个答案:

答案 0 :(得分:1)

我刚刚定义了未知主机(?) / etc / hosts:

10.0.2.3 computer1
10.0.2.2 computer2 

在此之后,arp -a非常快,因此改善了反应-p的反应,提高了木偶剂的性能 - 测试

答案 1 :(得分:0)

问题是arp -a运行得很慢。

vagrant@lucid32:~$ time arp -a
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

real    0m20.022s
user    0m0.004s
sys     0m0.000s
vagrant@lucid32:~$

我认为这是虚拟机(4.1.12_77245),仅主机网络,ubuntu 10.04和Windows 7主机操作系统的某种组合的问题。

作为一种解决方法,假设我可以在不了解我的mac地址的情况下了解一下木偶,我将/opt/ruby/lib/ruby/gems/1.8/gems/facter-1.6.0/lib/facter/arp.rb的第7行替换为如下:

require 'facter/util/ip'

Facter.add(:arp) do
  confine :kernel => :linux
  setcode do
    ### output = Facter::Util::Resolution.exec('arp -a') # disable for slow arp
    output = "" ### return a blank, rather than the real (but slow) arp
    if not output.nil?
      arp = ""
      output.each_line do |s|
        if s =~ /^\S+\s\S+\s\S+\s(\S+)\s\S+\s\S+\s\S+$/
          arp = $1.downcase
          break # stops on the first match
        end
      end
    end
    "fe:ff:ff:ff:ff:ff" == arp ? arp : nil
  end
end

Facter::Util::IP.get_interfaces.each do |interface|
  Facter.add("arp_" + Facter::Util::IP.alphafy(interface)) do
    confine :kernel => :linux
    setcode do
      arp = Facter::Util::IP.get_arp_value(interface)
      "fe:ff:ff:ff:ff:ff" == arp ? arp : nil
    end
  end
end