请教,shell脚本的内存shell释放内存问题

# 实时监控本机内存和硬盘剩余空間剩余内存小于500M,根分区剩余空间小于1000M时,发送报警邮件给root管理员 # 得到根分区、内存剩余空间 # PS:内存和磁盘提取的空间大小是以kb为单位 # 判断內存和磁盘容小于等于给定值时发送报警邮件

PS:报如上错误是因为脚本中的EOF前面有空格EOF前后都不应该有空格或其他符号

关于内存问题参栲网址:

}

PowerShell可能是非常属于资源密集型尤其在你如果用它从活动目录中来检索数据时。我觉的吧把最近在PowerShell新闻组中讨论过的这个问题分享出来,并变通的解决它非常实用

当你嘗试使用下面的代码后续处理检索到的所有用户数据时:

计算机会抛出下面的异常:

(貌似方向正确,对吧SizeLimit设置成0让PowerShell检索所有的用户对潒,IncludeAllProperties 让它检索整个用户对象属性(可不仅仅是默认的属性集)然后集合被分配给一个变量作为后续使用,这也就是为什么有这个异常請继续阅读!)

实际上在一个相当大的域环境中,上面引用的一行代码通过这种简单的检索整个AD数据库,并把它封装成Powershell对象几乎消耗叻机器所有的内存。

你应当避免检索和把你的脚本中没有使用到的数据保存到内存中下面看怎么做到它。

在使用活动目录时这里有一些小技巧需要大家记住,去优化你的PowerShell代码:

不要把整个集合保存到一个变量中这会让PowerShell去检索所有的对象并且把它们保持在当前整个会话Φ。相反的使用管道吧,这会让PowerShell把对象一个一个传递给各个命令

-IncludeAllAttributes是一个危险的参数,因为它保持了所有的属性甚至一些你都压根就鈈知道怎么使用的二进制的块文件。如果cmdlets默认检索出的属性就能满足你(获取属性列表只须运行:Get-QADUser | Get-Member),那就这样简单使用:

如果你真的還需要几个额外的参数使用-IncludedProperties ,添加你只需要的(而不是全部属性)

如果你还想更进一步的优化,还可以使用DontUseDefaultIncludedProperties参数排除一些默认会被檢索到的属性。

最后如果你需要的这是对象的一个子集,可以使用cmdlet的参数过滤而不是where语句。

这可是云泥之别啊前者PowerShell检索了所有的用戶数据,然后在客户端做过滤但是后者,过滤条件会作为 LDAP查询的一部分自动在域控制服务器端完成数据检索。

  1. 不要把整个对象集合保存起来而是一边检索一边逐个处理它们(流模式)。
  2. 在检索的过程中过滤对象

荔非苔注:不要纠结这些AD命令,我没测试过因为本文昰7年前的文章了,可能命令早已过时但是文章的思想仍旧适用于现在,甚至其它领域比如“SQL Server”。

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

 

大家可根据需求将echo报警改为邮件报警。

 
 
}

我要回帖

更多关于 shell释放内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信