我的系统是 Centos 5.5,2G 内存,没有权限设置 swap,设置了mysqld, httpd
每天 3:00重启crontab
,并且每小时释放一次内存。
那么如何使用 crontab 释放内存?我根据网上的资料写了一些代码,但似乎不起作用...
crontab -e
6 * * * * sync;echo 3 > /proc/sys/vm/drop_caches
编辑这里是my.cnf
,不过我fulltext
有时需要搜索用到oderby date
。
key_buffer_size = 256M
max_allowed_packet = 8M
max_connections=1024
wait_timeout=5
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 256M
thread_cache_size = 8
query_cache_limit=2M
query_cache_size= 128M
thread_concurrency = 8
read_rnd_buffer_size=2M
tmp_table_size=128M
ft_min_word_len=2
ft_max_word_len=42
答案1
您引用的代码将导致内核丢弃它拥有的所有缓存数据……这正是它本来会丢弃的内存,只要任何东西想要使用更多内存。它不会对您的系统产生任何实际影响。
最终,除了运行较少的软件或重新启动进程外,您无法采取任何措施来回收额外的内存。Linux 没有机制在将应用程序以“内存不足”为由终止之前向其发出内存压力信号。
答案2
释放内存的更好方法是先知道是什么占用了您的额外内存。要找出答案,您可以使用命令“htop”,它将告诉您哪个进程占用了多少内存。
并使用“free -m”检查内存。
然后您只需重新启动该过程或评估它为何占用大量内存。
答案3
如果您的服务器命中率较高,为什么不考虑增加更多 RAM?调整 mysql/httpd 参数以确保它不会再次消耗内存后,这应该可以解决问题。