puppet recurse 导致的性能问题一例 推荐
2014-01-27 12:22
211 查看
很久之前使用puppet时遇到的一个问题,简单分享下。1.监控team报一台机器的swap报警,机器内存使用出现问题,导致系统开始使用swap。
2.登录服务器,通过top –d 1 –c查看系统状况,发现puppet内存使用量很大,而且一直在增加,手动运行,发现一直运行不完。
同时,分析puppet的运行日志,发现puppet开始运行的时间和内存监控图上面的趋势吻合,定位为puppet运行导致的问题。
3.手动运行puppet,并使用lsof和strace来定位问题。。1)通过lsof发现系统打开了大量的file,并且都在调用lstat函数lstat("/xxxxxx/live/b6c3506377254e9b879268aecbe77036/1338868/1338868515.block", {st_mode=S_IFREG|0644, st_size=261182, ...}) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
2)同时,strace来统计各个方法调用消耗的时间,发现消耗在getdents函数上。strace -p 21741 -cProcess 21741 attached - interrupt to quitProcess 21741 detached% time seconds usecs/call calls errors syscall------ ----------- ----------- --------- --------- ---------------- 95.65 0.040955 87 469 getdents 4.22 0.001807 0 426525 rt_sigprocmask 0.07 0.000030 0 235 lstat 0.06 0.000026 0 235 close 0.00 0.000000 0 235 open 0.00 0.000000 0 235 lseek
lstat和getdents函数都是用来查看文件属性信息的。
4.查看puppet中module的代码,发现在这个目录下使用了file的资源,并使用了recurse的参数。
而由于业务的特殊性,这个目录下面会有大量的文件,这样就导致puppet在判断文件的属性上消耗了大量的时间,进而占用了大量的内存。
问题找到了,解决方法也很简单,去掉recurse就好了,里面小文件的属性就交给exec资源去处理吧。
2.登录服务器,通过top –d 1 –c查看系统状况,发现puppet内存使用量很大,而且一直在增加,手动运行,发现一直运行不完。
同时,分析puppet的运行日志,发现puppet开始运行的时间和内存监控图上面的趋势吻合,定位为puppet运行导致的问题。
3.手动运行puppet,并使用lsof和strace来定位问题。。1)通过lsof发现系统打开了大量的file,并且都在调用lstat函数lstat("/xxxxxx/live/b6c3506377254e9b879268aecbe77036/1338868/1338868515.block", {st_mode=S_IFREG|0644, st_size=261182, ...}) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
2)同时,strace来统计各个方法调用消耗的时间,发现消耗在getdents函数上。strace -p 21741 -cProcess 21741 attached - interrupt to quitProcess 21741 detached% time seconds usecs/call calls errors syscall------ ----------- ----------- --------- --------- ---------------- 95.65 0.040955 87 469 getdents 4.22 0.001807 0 426525 rt_sigprocmask 0.07 0.000030 0 235 lstat 0.06 0.000026 0 235 close 0.00 0.000000 0 235 open 0.00 0.000000 0 235 lseek
lstat和getdents函数都是用来查看文件属性信息的。
4.查看puppet中module的代码,发现在这个目录下使用了file的资源,并使用了recurse的参数。
而由于业务的特殊性,这个目录下面会有大量的文件,这样就导致puppet在判断文件的属性上消耗了大量的时间,进而占用了大量的内存。
问题找到了,解决方法也很简单,去掉recurse就好了,里面小文件的属性就交给exec资源去处理吧。
相关文章推荐
- zabbix value map导致报警失效问题一例 推荐
- 不显示删除回复显示所有回复显示星级回复显示得分回复 [推荐] [百度分享]频繁分配释放内存导致的性能问题的分析
- resin access log导致的锁问题一例 推荐
- XAF-由于try catch导致的性能问题一例
- 数据分布不均匀走HASH JOIN导致的性能问题
- 频繁分配释放内存导致的性能问题的分析
- 关于VSAN 6.x版本里一个针对SSD性能不足时的写入保护导致强行Unmount VSAN磁盘问题
- Db2由于取sequence 的 next value 导致的性能问题案例分析
- 信息系统实践手记6-JS调用Flex的性能问题一例
- oracle_SQL优化_高水位线导致的性能问题
- mysql通过将or改成union来优化sql性能问题一例
- 对JavaEE的十大不当使用导致的性能问题
- Android应用性能优化系列视图篇——ListView自适应导致的严重性能问题
- [百度分享]频繁分配释放内存导致的性能问题的分析
- 优化案例:缺少整体规划导致DB性能问题
- 当视频变成反转片――视频滤镜问题导致视频色彩失真一例
- 解决 ORACLE 11.2 动态采样导致的性能问题
- 频繁分配释放内存导致的性能问题的分析
- 【百度分享】频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析