当我尝试将一个目录recursion部署到一个已经拥有大量文件的文件夹中时,Puppet似乎挂住了CPU。
我的系统上的用户资源使用的提供程序似乎没有将/ etc / skel中的文件部署到新调配的目录中。 所以在我看来,我可以使用这个recursion部署来填充目录。
# password is in the vault user { "myuser": ensure => 'present', password => 'guessmypassword', home => '/home/myuser', shell => '/bin/bash', } file { '/home/myuser': ensure => directory, owner => 'myuser', group => 'myuser', mode => 0755, require => User['myuser'], } file { '/home/myuser/.ssh': ensure => directory, owner => 'myuser', group => 'myuser', mode => 0700, require => User['myuser'], } file { 'myuser_skeleton': path => '/home/myuser', source => '/etc/skel', owner => 'myuser', group => 'myuser', recurse => true, replace => false, }
问题似乎出现的地方是用户在其中一个系统上有一个包含大约5,000个文件的项目的svn工作副本。 在这个系统上运行的傀儡似乎在100分钟内坐了40分钟。
我在strace下运行木偶,在locking过程中,它似乎一直对某些文件调用gettimeofday()超过4000次,然后移到下一个并重复。
munmap(0xb6ffc000, 4096) = 0 lstat64("/home/myuser/ptlib/include/ptlib/Nucleus++/ptlib/.svn/tmp/props", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat64("/home/myuser", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 lstat64("/home/myuser/ptlib/src/ptlib/common/.svn/prop-base/sfile.cxx.svn-base", {st_mode=S_IFREG|0444, st_size=109, ...}) = 0 stat64("/usr/local/lib/site_ruby/1.8/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/1.8/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/1.8/i486-linux/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/1.8/i486-linux/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/1.8/i386-linux/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/1.8/i386-linux/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_ruby/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/vendor_ruby/1.8/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/vendor_ruby/1.8/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/vendor_ruby/1.8/i486-linux/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/vendor_ruby/1.8/i486-linux/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/vendor_ruby/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/vendor_ruby/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/1.8/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/1.8/digest/md5.so", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/1.8/i486-linux/digest/md5.rb", 0xbff645f0) = -1 ENOENT (No such file or directory) stat64("/usr/lib/ruby/1.8/i486-linux/digest/md5.so", {st_mode=S_IFREG|0644, st_size=6848, ...}) = 0 open("/usr/lib/ruby/1.8/i486-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 6 fstat64(6, {st_mode=S_IFREG|0644, st_size=6848, ...}) = 0 close(6) = 0 open("/home/myuser/ptlib/src/ptlib/common/.svn/prop-base/sfile.cxx.svn-base", O_RDONLY|O_LARGEFILE) = 6 fstat64(6, {st_mode=S_IFREG|0444, st_size=109, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ffc000 read(6, "K 17\nCVSRevisionNumber\nV 3\n1.3\nK"..., 4096) = 109 read(6, "", 4096) = 0 close(6) = 0 munmap(0xb6ffc000, 4096) = 0 lstat64("/home/myuser/ptlib/plugins/vidinput_bsd/.svn/props", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat64("/home/myuser", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0 gettimeofday({1319573116, 304890}, NULL) = 0 gettimeofday({1319573116, 304951}, NULL) = 0 gettimeofday({1319573116, 304993}, NULL) = 0 gettimeofday({1319573116, 305034}, NULL) = 0 ... repeats ~4000 times. gettimeofday({1319573116, 305075}, NULL) = 0 gettimeofday({1319573116, 305116}, NULL) = 0 gettimeofday({1319573116, 305158}, NULL) = 0 gettimeofday({1319573116, 305199}, NULL) = 0 gettimeofday({1319573116, 305245}, NULL) = 0 brk(0xbbf1000) = 0xbbf1000 brk(0xbc12000) = 0xbc12000 brk(0xbc33000) = 0xbc33000 brk(0xbc55000) = 0xbc55000 brk(0xbc76000) = 0xbc76000 brk(0xbc98000) = 0xbc98000 ... repeats 200 times stat64("/etc/skel", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/etc/skel", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/etc/skel", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 open("/etc/skel", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 6 brk(0xc334000) = 0xc334000 lseek(6, 0, SEEK_SET) = 0 getdents64(6, /* 5 entries */, 32768) = 144 getdents64(6, /* 0 entries */, 32768) = 0 close(6) = 0 ... and one
使用recurse => remote而不是recurse => true – 这将只扫描服务器端而不是客户端的文件。
远程 – recursion地下降到远程目录,但不是本地目录。 允许将几个文件复制到包含许多非托pipe文件的目录中,而不扫描所有本地文件。
从http://docs.puppetlabs.com/references/latest/type.html#file