服务器的CPU、内存、磁盘的阈值是多少
一、服务器硬盘空间:
服务器的磁盘空间应该保持一定的空闲容量。一般情况下,文件时的空间使用率不超过85%。当磁盘空间低于可控制下限时,用户应该马上进行相应处理,避免磁盘空间被占满后关键服务不能正常运行的情况发生。在可视化管理见面中,磁盘空间的使用情况会根据这只的阈值显示不同的颜色。
二、服务器CPU利用率
1服务器CPU的利用率,可针对系统的每个CPU分别分析其相应的利用率;
2服务器当前进程列表所占用的CPU利用率,CPU使用时间;
3显示服务器CPU性能(分进程显示)实时变化情况和历史变化趋势;
4服务器CPU阈值告警,当服务器CPU负载过大/小,能产生报警;
5服务器进程CPU占用阈值告警,当进程占用CPU过大/小,能产生报警;
三、服务器内存利用率
1服务器内存的利用率;
2服务器当前进程列表所占用的内存利用情况,内存利用率;
3显示服务器内存利用率(分进程显示)实时变化情况和历史变化趋势;
4服务器内存利用率阈值告警,当服务器内存利用率过高,能产生报警;
5服务器进程内存利用率阈值告警,当进程占用内存过高,能产生报警;
服务器内存占用过高的解决方法:
1,首先通过任务管理器进行进程排序,查找占用内存较大的程序进程。一般占用内存较大的进程有W3WP、sqlserver、mysqld-ntexe;
2, 站点进程w3wp 可以在cmd命令行中通过 iisapp 命令来对应是那个网站占用内存较大。可以通过设置回收时间、内存最大使用值或共用进程池来减少内存的占用,但是如果要保证网站的访问质量,还是建议升级至更高型号来解决;
3,数据库 sql server 也可以通过数据库的企业管理器来设置最大内存占用,但是如果网站程序必须要占用较大内存的话,设置后会发生页面报错、打不开等问题;
4,MYSQL本身会占用较大虚拟内存,如果不使用mysql数据库的话,可以将其停止。
Linux 进程通过 C 标准库中的内存分配函数 malloc 向系统申请内存,但是到真正与内核交互之间,其实还隔了一层,即内存分配管理器(memory allocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL 默认使用的是 glibc 的 ptmalloc 作为内存分配器。
内存分配器采用的是内存池的管理方式,处在用户程序层和内核层之间,它响应用户的分配请求,向操作系统申请内存,然后将其返回给用户程序。
为了保持高效的分配,分配器通常会预先向操作系统申请一块内存,当用户程序申请和释放内存的时候,分配器会将这些内存管理起来,并通过一些算法策略来判断是否将其返回给操作系统。这样做的最大好处就是可以避免用户程序频繁的调用系统来进行内存分配,使用户程序在内存使用上更加高效快捷。
关于 ptmalloc 的内存分配原理,个人也不是非常了解,这里就不班门弄斧了,有兴趣的同学可以去看下华庭的《glibc 内存管理 ptmalloc 源代码分析》。
关于如何选择这三种内存分配器,网上资料大多都是推荐摒弃 glibc 原生的 ptmalloc,而改用 jemalloc 或者 tcmalloc 作为默认分配器。因为 ptmalloc 的主要问题其实是内存浪费、内存碎片、以及加锁导致的性能问题,而 jemalloc 与 tcmalloc 对于内存碎片、多线程处理优化的更好。
目前 jemalloc 应用于 Firefox、FaceBook 等,并且是 MariaDB、Redis、Tengine 默认推荐的内存分配器,而 tcmalloc 则应用于 WebKit、Chrome 等。
查看cpu占用
在命令行中输入 “top”
即可启动 top
top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。
使用top查看系统负荷
top命令可以动态监视系统负荷,包括CPU、内存的使用率和占用资源较多的进程详情等。
动态查看系统负荷(占用一个终端)
top
显示后退出
top -n 1
以文本方式输出,以备其它程序使用
top -b
好了,我们现在来看限制CPU和内存占用率方法
脚本内容:
代码如下
#!/bin/sh
UPID=`top -bn 1 | grep "^ [1-9]" | awk '{ if($9 20 || $10 25 id -u $2 500) print $1}'`
for PID in $UPID
do
renice +10 $PID
echo "renice +10 $PID"
done
我对上面的脚本进行了修改,可以让其针对整个服务器的进程进行限制
修改后的脚本:
代码如下
#!/bin/sh
UPID=`top -bn 1 | grep "^ [1-9]" | awk '{ if($9 50 || $10 25 ) print $1}'`
for PID in $UPID
do
renice +10 $PID
echo "renice +10 $PID"
done
可以将这个脚本放到cron中运行,让其每分钟检查一次:
代码如下 chmod +x limitsh
vi /etc/crontab
/1 /bin/sh /root/soft_shell/limitsh
ps:
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
那么top -bn 1 就是获取一次,top的输出结果。
grep "^[1-9]" : 是为了直接获取PID号,排除掉表头等信息。
awk '{ if($9 20 || $10 25 id -u $2 500) print $1}' :
取得cpu使用率大于20%或者内存使用率大于25%,且用户uid大于500的进程pid。
0条评论