我正在AWS EC2微型实例上运行Web服务器。 实例有〜630MB的RAM。 随着时间的推移,我有几个httpd进程和非常小的空闲RAM。 当我重新启动httpd服务时,我最终释放了大约350MB的RAM。
我以为每12小时使用根下的cron作业来实现这个自动化。 我的脚本包含代码
service httpd restart service mysqld restart ps aux free -m
这是我第一次尝试cron脚本。
我收到一封电子邮件,其中包含ps aux和free -m的预期输出,但是
./scriptName.sh: line 1: service: command not found ./scriptName.sh: line 2: service: command not found
为重新启动命令。
脚本以root身份运行。 我担心使用sudo可能会导致脚本挂起。 ps的相关行输出 –
root 14664 0.0 0.2 142200 1720 ? S 22:41 0:00 CROND root 14665 0.0 0.2 9296 1236 ? Ss 22:41 0:00 /bin/sh -c ./scriptName.sh smmsp 14667 0.0 0.6 76020 4244 ? R 22:41 0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root root 14669 0.0 0.1 11244 1008 ? R 22:41 0:00 ps aux
什么是正确的做法,以成功重新启动服务?
这样做是否明智?
free -m输出
total used free shared buffers cached Mem: 596 573 23 0 8 71 -/+ buffers/cache: 493 103 Swap: 0 0 0
主要的问题是在cron的运行环境中没有定义正确的$PATH ,所以你需要使用完整的path来service这个工作。
你可以用命令find这个path, which service应该打印/usr/sbin/service 。
第二个问题:我不这样做,只是盲目地重新启动生产系统上的服务从来就不是一个好主意。 你有一个实际的内存/性能问题,或者你的内存只是被缓冲区等使用(见http://www.linuxatemyram.com/ )?
几个小时之后,请将free -m的输出添加到您的问题中。
看看Monit这样的东西可能会更好,而不是试图做一个自制的cron脚本。
下面是Apache的configuration示例:
http://mmonit.com/wiki/Monit/ConfigurationExamples#apache
你应该能够做到这样的事情:
if totalmem > 300 MB for 2 cycles then alert
在Apache块。
Monit应该位于其中一个RPM存储库中。
我想你会以这种错误的方式去做。 首先考虑调整Apache。 然后,研究Linux内存pipe理。 你想用你的服务器内存,否则为什么你有它?
你为什么要免费的RAM? 免费的RAM是浪费RAM。 或者你不计算caching内存作为免费ram(请参阅linuxatemyram.com ),或者你应该调整你的apacheless量的MaxClients,以便Apache会减less内存。