linux服务器内存占用过大解决办法linux操作系统7篇 linux查看服务器内存占用

时间:2022-10-15 18:44:00 综合范文

  下面是范文网小编分享的linux服务器内存占用过大解决办法linux操作系统7篇 linux查看服务器内存占用,供大家品鉴。

linux服务器内存占用过大解决办法linux操作系统7篇 linux查看服务器内存占用

linux服务器内存占用过大解决办法linux操作系统1

  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:什么是工作集

  我们可以简单的将内存理解为数据结构 工作集的一个结合,简单的说,应用程序在运行过程中进程所占用内存中的工作空间就叫做工作集。

linux服务器内存占用过大解决办法linux操作系统2

  可在Windows Server 2003中打开“控制面板”→“管理工具”→“终端服务配置”,在打开窗口中选择“连接”,并双击右侧的“RDP-Tcp”选项,在弹出对话框中切换到“会话”标签,选择“替代用户设置”,并修改“结束已断开的会话”为“1分钟”,

  如问题未能解决,则可在“运行”栏中执行“gpedit.msc”命令,打开组策略编辑器,一次展开“计算机配置”→“管理模板”→“Windows组件”→“终端服务”,并双击右侧窗格中的“限制连接数量”策略,在弹出窗口中选择“已启用”,并设置“TS允许的最大连接数”为“999999”,即可解除远程终端的连接数限制。

linux服务器内存占用过大解决办法linux操作系统3

  使用windows iis环境的朋友可能会发现上传比较大的文件居然会上传不了,后来百度了一下发现是iis7自己限制了上传文件大小,我们只要修改web.config中的maxRequestLength即可,

  在IIS7下,即便你在web.config设置了maxRequestLength=”1048576”最大允许上传的大小,也是没用的,其实是受C:/Windows/System32/inetsrv/config/applicationHost.config的限制, 默认最大只能上传30M的文件,修改下这个文件就好了,在该文件的system.webServer/security/requestFiltering/节内添加

“ />

  就行了,将修改为你要允许的大小,注意,这里的单位是bytes,而web.config里的maxRequestLength的单位是KB

  具体方法如下

  目标是要修改文件C:/Windows/System32/inetsrv/config/schema/IIS_schema.xml?。红色下划线部分使我们要修改的目标位置,

代码如下复制代码

  问题在于,这个文件是只读的,即使用管理员权限也不能修改。要先修改文件的权限,然后去掉只读属性才可以。

  1.右键文件->属性->安全,选中目标用户,点击高级,修改文件所有者;

  2.确定后点击编辑,就可以修改当前用户的权限了,添加“写入”权限。至此,权限设置OK了。

  3.将文件的只读属性去掉。

  4.以管理员身份打开VS,然后在VS中编辑目标XML文件,修改所需位置即可。

  修改后重启IIS.

linux服务器内存占用过大解决办法linux操作系统4

  使用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭,如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。

  一、应用程序没有检查内存分配失败

  程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。

  内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。

  若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大,

  这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。

  内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。

  二、应用程序由于自身BUG引用了不正常的内存指针

  在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是 作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!

  像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。

  如果系统经常有所提到的错误提示,下面的建议可能会有帮助:

  1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。

  2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。

  3.试用新版本的应用程序。

linux服务器内存占用过大解决办法linux操作系统5

  因为有了服务器,所以有了数据的读取顺序,因为要实现顺序,所以有了“锁”,因为有了“锁”,结果我们的服务器阻塞了

  服务器阻塞是个很头疼的问题,多少个日日夜夜,只因为服务器的呼唤,我一路狂奔就去医院杀“阻塞进程”去了,

  搞完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

-- 取第一 条记录

  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数据库啊,真烂。

  如果你想进一步追踪阻塞的原因的话,把输出写入到日志中去就行了!

linux服务器内存占用过大解决办法linux操作系统6

  文章来给各位同学介绍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。

linux服务器内存占用过大解决办法linux操作系统7

  初学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();

}

linux服务器内存占用过大解决办法linux操作系统7篇 linux查看服务器内存占用相关文章:

页面置换算法实验报告精选3篇(操作系统页面置换算法实验报告总结)

文件系统设计实验心得3篇(操作系统实验文件系统设计)