linux服务器内存占用过大解决办法linux操作系统((精选10篇))由网友“明天会下雨吗”投稿提供,下面就是小编给大家带来的linux服务器内存占用过大解决办法linux操作系统,希望大家喜欢,可以帮助到有需要的朋友!
篇1:linux服务器内存占用过大解决办法linux操作系统
今天有一朋友问我为什么linux服务器内存占用过高呢,有没有办法解决这个问题,下面我来给各位同学介绍linux服务器内存占用过大解决方法,希望此方法对各位同学有帮助,
今天到公司按照惯例检查了下所有服务器的状态,发现有台服务器的内存占用比平常大很多,如下图
马上qq上问了下程序开发是否最近这1-2天改了什么东西,在得知没有改什么的情况下,马上重启了下php-fpm和nginx,重启之后看了下,内存释放出了1G,但这还不行,因为这台服务器是8G内存,平时最多使用4G多的样子,想今天使用到了7G多都快把服务器内存占用完了,很明显是不正常的,继续进行检查.
在检查过程中,我使用了top来看到底是哪个进程占用内存最大,看了近1分钟没有发现什么,然后使用命令查看占用内存最大的10个进程:
代码如下复制代码ps -aux | sort -k4nr | head -n 10
也只是显示了nginx和php-fpm占用内存最大,但我重启了这两个进程,看来跟他们2个无关,我又开始怀疑是不是服务器被黑了,马上查看进程ps aux,这一看就发现了问题,有个脚本在进程里有很多个产生,马上执行下面命令进行kill掉:
代码如下复制代码kill -9 $(ps aux | grep 进程名 |grep -v grep| awk '{print $2}')现在这看内存使用率,内存终于正常了,好了,再观察几分钟,没有问题退出服务器了,继续检查那个脚本的问题.
ps:这里要强调的事,不要根据自己的直觉去随便以为是什么的问题,最好是调查清楚了再去执行,比如我这里就是根据自己的直觉以为是nginx和php-fpm的问题,还好是跟老大打了招呼重启的,不然后果很严重.
再给大家一个查看内存占用最大的进程的命令:
代码如下复制代码ps aux| grep -v “USER” |sort -n -r -k 4 |awk 'NR==1{ print $0}'我使用的是php脚本我们这里在linux中写了一个linux负载过高时重启php脚本
大家可以根据自己服务器的情况来决定要负载超过多少就重启php,我这里只设定了负载到1就重启php.
系统:centos 5.9 64位
脚本内容:
vi check-php.sh
代码如下复制代码#!/bin/sh
TOP_SYS_LOAD_NUM=1
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`
echo $(date +“%y-%m-%d”) `uptime`
if [ `echo “$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM”|bc` -eq 1 ]
then
echo “#0#” $(date +“%y-%m-%d %H:%M:%S”) “pkill php-fpm” `ps -ef | grep php-fpm | wc -l`
/etc/init.d/php-fpm stop
sleep 8
pkill php-fpm
sleep 8
for i in 1 2 3
do
if [ `pgrep php-fpm | wc -l` -le 0 ]
then
/etc/init.d/php-fpm start
sleep 30
echo “#1#” $(date +“%y-%m-%d %H:%M:%S”) “start php-fpm” `ps -ef | grep php-fpm | wc -l`
fi
done
else
if [ `pgrep php-fpm | wc -l` -le 0 ]
then
/etc/init.d/php-fpm start
sleep 30
echo “#2#” $(date +“%y-%m-%d %H:%M:%S”) “start php-fpm” `ps -ef | grep php-fpm | wc -l`
fi
fi
定时执行
代码如下复制代码*/3 * * * * /root/shell/check-php.sh >>/var/log/check-php.log如果你运行脚本出现:
代码如下复制代码: line 6: bc: command not found: line 6: [: -eq: unary operator expected
表示没有bc命令,centos可以用 yum -y install bc 安装.
篇2:Win7操作系统内存占用大原因分析
Superfetch并不是一个新的技术,在Vista时代就已经开始采用,不过鉴于用过Vista的人数比较少,而XP时代的各种电脑技巧始终还深入人心,所以很多人都在疑问为何Windows 7内存占用如此之大,
Superfetch内存管理机制会将用户可能使用的应用程序页面利用内存可用空间进行预加载;尽可能地避免系统发生从硬盘的页面调用;让应用程序最快速度开启;不会由于计算机长时间闲置而使突然使用变得响应迟缓;在退出大型应用程序后会主动将之前被迫转移到虚拟内存中的页面重新调入内存当中。这样看起来似乎专业了点,所以接着往下看,会很好地对这些特点进行理解。
为何第一次启动程序会感觉很慢?
相信大家都有过类似的经历。当我开机后,第一次运行一个程序,就比如说是Word吧,可能需要5秒才能启动。当我关闭后再开,也许只用2秒。如果我不关闭,直接打开另外一个Word文件,那就更快了。
这是什么原因造成的呢?
当我们开机后,工作集里面没有Word这个员工(页面),他还在家(硬盘)里面,
于是当我召唤他的时候,它才从家走到办公室(工作集)。这样的过程就叫做硬调页了,当然需要的时间长。而当我们关闭了Word时候,他就被派往大厦的另一房间,我却马上再次召唤他,这时,另一个房间内的数据还没被清零,他便不用从家里走来,而是直接从数据结构里面引入就可以了。在不关闭这个程序Word的情况下,他也不用为其他程序让路的时候,它还存在于办公室(工作集)里面,召唤他的时候就会更快。这样的无需从硬盘中重新调用数据,而是将数据结构中的页面重新挂载到工作集中的过程,便叫做软调页了。大家都知道内存速度远远快于硬盘,所以软调页的使用就是第二次运行程序变得很快的原因了。
Windows 7内存占用大的原因
现在我们知道了当内存中有所需程序页面的时候会使程序启动变得更快。而Windows 7中的Superfetch已经具有了学习的功能,自从第一次使用Windows 7时,Superfetch就开始记录我们的使用习惯,将我们经常使用的程序的页面在开机后进行提前加载,那么当我们第一次开启程序的时候便可以获得像第二次开启一样的速度了。所以这些预加载的页面就会使得我们的内存占用变多。简单地说就是让所有程序操作在内存中进行,避免使用硬盘硬调页空间,这也就是为何感觉Windows 7占用很大内存的原因.
篇3:Windows操作系统出现内存错误解决办法
使用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭,如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。
一、应用程序没有检查内存分配失败
程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。
若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大,
这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。
二、应用程序由于自身BUG引用了不正常的内存指针
在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是 作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!
像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。
如果系统经常有所提到的错误提示,下面的建议可能会有帮助:
1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。
2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。
3.试用新版本的应用程序。
篇4:Windows 7操作系统内存占用大原因分析
Superfetch并不是一个新的技术,在Vista时代就已经开始采用,不过鉴于用过Vista的人数比较少,而XP时代的各种电脑技巧始终还深入人心,所以很多人都在疑问为何Windows 7内存占用如此之大,
Superfetch内存管理机制会将用户可能使用的应用程序页面利用内存可用空间进行预加载;尽可能地避免系统发生从硬盘的页面调用;让应用程序最快速度开启;不会由于计算机长时间闲置而使突然使用变得响应迟缓;在退出大型应用程序后会主动将之前被迫转移到虚拟内存中的页面重新调入内存当中。这样看起来似乎专业了点,所以接着往下看,会很好地对这些特点进行理解。
为何第一次启动程序会感觉很慢?
相信大家都有过类似的经历。当我开机后,第一次运行一个程序,就比如说是Word吧,可能需要5秒才能启动。当我关闭后再开,也许只用2秒。如果我不关闭,直接打开另外一个Word文件,那就更快了。
这是什么原因造成的呢?
当我们开机后,工作集里面没有Word这个员工(页面),他还在家(硬盘)里面。于是当我召唤他的时候,它才从家走到办公室(工作集)。这样的过程就叫做硬调页了,当然需要的时间长。而当我们关闭了Word时候,他就被派往大厦的另一房间,我却马上再次召唤他,这时,另一个房间内的数据还没被清零,他便不用从家里走来,而是直接从数据结构里面引入就可以了。在不关闭这个程序Word的情况下,他也不用为其他程序让路的时候,它还存在于办公室(工作集)里面,召唤他的时候就会更快。这样的无需从硬盘中重新调用数据,而是将数据结构中的页面重新挂载到工作集中的过程,便叫做软调页了。大家都知道内存速度远远快于硬盘,所以软调页的使用就是第二次运行程序变得很快的原因了。
Windows 7内存占用大的原因
现在我们知道了当内存中有所需程序页面的时候会使程序启动变得更快。而Windows 7中的Superfetch已经具有了学习的功能,自从第一次使用Windows 7时,Superfetch就开始记录我们的使用习惯,将我们经常使用的程序的页面在开机后进行提前加载,那么当我们第一次开启程序的时候便可以获得像第二次开启一样的速度了。所以这些预加载的页面就会使得我们的内存占用变多。简单地说就是让所有程序操作在内存中进行,避免使用硬盘硬调页空间,这也就是为何感觉Windows 7占用很大内存的原因。
查看预加载的内存
而在XP时代,也许你也有过类似的经历:当开始使用一些程序后,由于有事便离开了,
回来的时候却发现系统响应十分缓慢,特别糟糕。这是由于XP的内存管理模式效率非常低下。
当我们离开后,程序都处于不使用状态。这时系统的一些后台程序,如磁盘整理、杀毒软件等程序就会全速运行,导致我们使用的一些程序页面不得不被挤到了硬盘虚拟内存中。可是当这些后台程序完成任务后,XP系统并不会把之前被挤到虚拟内存的 页面导回内存里。于是在再次使用电脑时,系统才会手忙脚乱的进行临时调配,甚至是硬调页。导致程序响应极其迟缓。所以看上去XP的空闲内存很多,事实上都 没起什么太大的作用。
Windows 7使用建议
任何人都希望通过优化的手段让自己的电脑运行速度达到最理想的状态,而内存又是影响电脑运行速度非常重要的因素,我们在了解了Windows 7 的内存管理机制,再来介绍哪些方法可以给系统加速。
1、多使用休眠和睡眠
由于SuperFetch要在开机后进行预加载,所以建议大家不要关机。尽量使用休眠或睡眠,这样SuperFetch的预加载内容就会保留。从而提高速度和效率。
2、使用ReadyBoost
很多从XP升上来的用户由于系统的内存不够大,所以无法全面的发挥SuperFetch的功能。我们可以使用ReadyBoost功能来帮 我们解决这个难题。
只要符合条件的闪存都可以加速我们的系统。ReadyBoost功能是利用闪存的容量作为SuperFetch预加载页面的储存空间。但由于微 软采用了特殊的算法,所以并不会影响闪存的寿命。还有,用于ReadyBoost的闪存最好为物理内存大小1~2.5倍。如果系统物理内存足够大的话,就 没有必要使用ReadyBoost了。右键点击U盘盘 符选择属性,切换到readyboost一栏,速度达到标准的U盘都可以开启这个功能。
不是所有U盘都能使用
通过对SuperFetch的了解,希望更多的朋友进入使用Windows 7的队伍中来。其实同为Windows,不同又能到哪里呢?不习惯也就是一时的。毕竟,经过了Vista的磨练,Windows 7也会变得更成熟!
Tips:什么是工作集
我们可以简单的将内存理解为数据结构 工作集的一个结合,简单的说,应用程序在运行过程中进程所占用内存中的工作空间就叫做工作集。
篇5:LIS服务器假死阻塞解决办法Windows服务器操作系统
因为有了服务器,所以有了数据的读取顺序,因为要实现顺序,所以有了“锁”,因为有了“锁”,结果我们的服务器阻塞了
服务器阻塞是个很头疼的问题,多少个日日夜夜,只因为服务器的呼唤,我一路狂奔就去医院杀“阻塞进程”去了,
搞完ISO15189,我想解决这个问题。
一、自动解锁。
使用Select @@LOCK_TIMEOUT命令可以看得到当前数据库加锁的超时期限,单位是毫秒。如果为“-1”,代表不会有超时,服务器将会一直处于加锁状态。
因此,我能想到的第一种方法就是”SET LOCK_TIMEOUT 30000″。既然服务器都给予了这样一个功能,那我不如直接用上。按照如上设定,如果加锁持续了30秒,则自动解锁!
想象很美好,但是现实很残酷,第二天,我还是跑过去杀进程去了!阻塞的进程压根就会一直存在!
二、自动结束阻塞进程
以下为结束阻塞进程的SQL存储过程:
--结束SQL阻塞的进程%%%%%%%%%%%%%%%%%%%%%%
代码如下复制代码create procedure sp_Kill_lockProcess
as
begin
SET NOCOUNT ON
declare @spid int,@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int,
@sSql nvarchar (200)
create table #tmp_lock_who (
id int identity(1,1),
spid smallint,
bl smallint)
IF @@ERROR0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl)
select 0 ,blocked
from
(select * from sysprocesses where blocked>0 ) a
where not exists
(
select * from (select * from sysprocesses where blocked>0 ) b
where a.blocked=spid
)
union select spid,blocked from sysprocesses where blocked>0
IF @@ERROR0 RETURN @@ERROR
-- 找到临时表的记录数
select @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR0 RETURN @@ERROR
while @intCounter
begin
-- 取第一 www.111cn.net 条记录
select @spid = spid,@bl = bl
from #tmp_lock_who where Id = @intCounter
begin
if @spid =0
begin
set @sSql='kill ' + CAST(@bl AS VARCHAR(10))
exec sp_executesql @sSql
end
end
-- 循环指针下移
set @intCounter = @intCounter + 1
end
drop table #tmp_lock_who
SET NOCOUNT OFF
return 0
end
go
将上述语句执行后,在master数据库下,即可以找到存储过程sp_Kill_lockProcess,
在SQL SERVER代理中添加作业KillBlocking,将执行时间设置为每10分钟一次,搞定!
测试一下,每天可以杀死三个阻塞进程,我们的LIS数据库啊,真烂。
如果你想进一步追踪阻塞的原因的话,把输出写入到日志中去就行了!
篇6:Windows 系统查看端口占用以及解决端口占用Windows服务器操作系统
文章来给各位同学介绍Windows 系统查看端口占用以及解决端口占用,有需要了解的朋友不防进入参考,
相信搞PHP开发的人,经常恼怒80端口被一些其他服务占用。在没有一个行之有效的方法情况下,只能不断重启apache或nginx,或者删除那些认为可能会占用80端口的软件。
其实,我们不必这么紧张的。
解决方法如下:
1、查看占用80端口的程序:
打开命令提示符,即在运行里面输入:cmd,然后执行如下命令:
netstat -ano | findstr 80该命令的意思是:查找使用80端口的进程。
想必有一些系统常识的人都知道,一般一个程序对应一个进程。找到了进程,那么就知道对应的程序是什么了。然后,我们直接结束掉该进程即可。
该命令执行行,会输出一个列表,列表的最后一列是PID。
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2060
TCP 0.0.0.0:8800 0.0.0.0:0 LISTENING 924
TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING 1080
TCP 0.0.0.0:49162 0.0.0.0:0 LISTENING 680
TCP 192.168.100.111:80 192.168.100.111:54888 TIME_WAIT 0
TCP 192.168.100.111:49422 123.58.182.253:80 ESTABLISHED 5632可以看到第最后一行,有一个进程ID为5632的程序占用了我们的80端口,
2、通过PID找到程序:
@打开任务管理器,点击“进程”选项卡,如果里面找不到PID列,则通过如下方式打开:
任务管理器—查看—选择列—勾选PID。
然后,找到5632这个PID,结束掉该进程即可。
这样我们就解决了端口占用的问题。当然,我们还要再重启一下apache或nginx。
篇7:Windows中IIS7 大文件上传限制解决办法Windows服务器操作系统
使用windows iis环境的朋友可能会发现上传比较大的文件居然会上传不了,后来百度了一下发现是iis7自己限制了上传文件大小,我们只要修改web.config中的maxRequestLength即可,
在IIS7下,即便你在web.config设置了maxRequestLength=”1048576”最大允许上传的大小,也是没用的,其实是受C:/Windows/System32/inetsrv/config/applicationHost.config的限制, 默认最大只能上传30M的文件,修改下这个文件就好了,在该文件的system.webServer/security/requestFiltering/节内添加
就行了,将
具体方法如下
目标是要修改文件C:/Windows/System32/inetsrv/config/schema/IIS_schema.xml 。红色下划线部分使我们要修改的目标位置,
代码如下复制代码问题在于,这个文件是只读的,即使用管理员权限也不能修改。要先修改文件的权限,然后去掉只读属性才可以。
1.右键文件->属性->安全,选中目标用户,点击高级,修改文件所有者;
2.确定后点击编辑,就可以修改当前用户的权限了,添加“写入”权限。至此,权限设置OK了。
3.将文件的只读属性去掉。
4.以管理员身份打开VS,然后在VS中编辑目标XML文件,修改所需位置即可。
修改后重启IIS.
篇8:windows 服务器远程桌面超出最大连接数解决办法Windows服务器操作系统
可在Windows Server 2003中打开“控制面板”→“管理工具”→“终端服务配置”,在打开窗口中选择“连接”,并双击右侧的“RDP-Tcp”选项,在弹出对话框中切换到“会话”标签,选择“替代用户设置”,并修改“结束已断开的会话”为“1分钟”,
如问题未能解决,则可在“运行”栏中执行“gpedit.msc”命令,打开组策略编辑器,一次展开“计算机配置”→“管理模板”→“Windows组件”→“终端服务”,并双击右侧窗格中的“限制连接数量”策略,在弹出窗口中选择“已启用”,并设置“TS允许的最大连接数”为“999999”,即可解除远程终端的连接数限制。
篇9:windows中QT5中文乱码解决办法Windows服务器操作系统
初学QT开发,遇到了中文乱码的问题,查了一下资料,只需要在main.c中增加两行代码即可,下面我把代码贴出来希望对大家会有所帮助,
代码如下复制代码#include ”myapp.h“
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForName(”gbk")); //指定GBK编码
MyApp w;
w.show;
return a.exec();
}
篇10:windows 服务器远程桌面超出最大连接数解决办法Windows服务器操作系统
改变远程终端模式
打开“控制面板”,双击“添加删除程序”,单击“添加删除Windows组件”,“组件”,在Windows组件向导对话框中选中“终端服务” , “下一步”,“应用服务器”,“下一步”,然后按照提示即可改变终端服务的模式。
Windows 2000终端服务有2种运行模式: 远程管理模式和应用程序服务器模式。远程管理模式允许系统管理员远程管理服务器,而且只允许2个终端会话同时登录终端服务器。应用程序服务器模式允许用户 运行一个以上应用程序,允许多个用户从终端登录访问服务器。但是,应用终端服务的用户必须有终端服务授权,即必须在90天之内在这个域或工作组中设置终端 服务授权服务器,否则用户需删除应用程序,然后再重新安装。
★ 学习心得如何总结
★ 市场报告
★ php实习报告
【linux服务器内存占用过大解决办法linux操作系统(精选10篇)】相关文章:
面试的个人职业生涯规划2023-02-20
保洁员岗位规章制度2023-10-04
网页设计的实习报告2022-12-03
网页设计实习工作总结2022-11-26
公共卫生管理专业求职信2023-09-01
如何保护Linux 网络安全2022-10-13
严格遵守岗位规章制度2022-11-14
网页设计实习报告2023-10-30
安卓实习心得感悟2023-08-22
计算机毕业生的实习报告2023-09-30