内存是Linux内核所管理的最重要的资源之一。内存管理系统是 *** 作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量。虚拟内存就是为了克服这个矛盾而采用的策略。系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量。Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内容又要使用时,再读回内存。以下就是我为大家整理到的详细LINUX系统内存管理的知识,欢迎大家阅读!!!
LINUX系统教程:内存管理的知识详解
一、内存使用情况监测
(1)实时监控内存使用情况
在命令行使用“Free”命令可以监控内存使用情况
代码如下:
#free
total used free shared buffers cached
Mem: 256024 192284 63740 0 10676 101004
-/+ buffers/cache: 80604 175420
Swap: 522072 0 522072
上面给出了一个256兆的RAM和512兆交换空间的系统情况。第三行输出(Mem:)显示物理内存。total列不显示核心使用的物理内存(通常大约1MB)。used列显示被使用的内存总额(第二行不计缓冲)。 free列显示全部没使用的内存。Shared列显示多个进程共享的内存总额。Buffers列显示磁盘缓存的当前大小。第五行(Swap:)对对换空间,显示的信息类似上面。如果这行为全0,那么没使用对换空间。在缺省的状态下,free命令以千字节(也就是1024字节为单位)来显示内存使用情况。可以使用—h参数以字节为单位显示内存使用情况,或者可以使用—m参数以兆字节为单位显示内存使用情况。还可以通过—s参数使用命令来不间断地监视内存使用情况:
#free –b –s2
这个命令将会在终端窗口中连续不断地报告内存的使用情况,每2秒钟更新一次。
(2)组合watch与 free命令用来实时监控内存使用情况:
代码如下:
#watch -n 2 -d free
Every 20s: free Fri Jul 6 06:06:12 2007
total used free shared buffers cached
Mem: 233356 218616 14740 0 5560 64784
-/+ buffers/cache: 148272 85084
Swap: 622584 6656 615928
watch命令会每两秒执行 free一次,执行前会清除屏幕,在同样位置显示数据。因为 watch命令不会卷动屏幕,所以适合出长时间的监测内存使用率。可以使用 -n选项,控制执行的频率;也可以利用 -d选项,让命令将每次不同的地方显示出来。Watch命令会一直执行,直到您按下 [Ctrl]-[C] 为止。
二、虚拟内存的概念
(1)Linux虚拟内存实现机制
Linux虚拟内存的实现需要六种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制、内存共享机制。
首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时如果发现程序中要用的虚地址没有对应的物理内存时,就发出了请求页要求;如果有空闲的内存可供分配,就请求分配内存(于是用到了内存的分配和回收),并把正在使用的物理页记录在缓存中(使用了缓存机制)。 如果没有足够的内存可供分配,那么就调用交换机制,腾出一部分内存。另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容交换到交换文件中后也要修改页表来映射文件地址。
(2)虚拟内存容量设定
也许有人告诉你,应该分配2倍于物理内存的虚拟内存,但这是个不固定的规律。如果你的物理保存比较小,可以这样设定。如果你有1G物理内存或更多的话,可以缩小一下虚拟内存。Linux会把大量的内存用做Cache的,但在资源紧张时回收回。你只要看到swap为0或者很小就可以放心了,因为内存放着不用才是最大的浪费。
三、使甩vmstat命令监视虚拟内存使用情况
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对 *** 作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。通常使用vmstat 5 5(表示在5秒时间内进行5次采样)命令测试。将得到一个数据汇总它可以反映真正的系统情况。
代码如下:
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0
vmstat命令输出分成六个部分:
(1)进程procs:
r:在运行队列中等待的进程数 。
b:在等待io的进程数 。
(2)内存memoy:
swpd:现时可用的交换内存(单位KB)。
free:空闲的内存(单位KB)。
buff: 缓冲去中的内存数(单位:KB)。
cache:被用来做为高速缓存的内存数(单位:KB)。
(3) swap交换页面
si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
(4) io块设备:
bi: 发送到块设备的块数,单位:块/秒。
bo: 从块设备接收到的块数,单位:块/秒。
(5)system系统:
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)切换次数。
(6)cpu中央处理器:
cs:用户进程使用的时间 。以百分比表示。
sy:系统进程使用的时间。 以百分比表示。
id:中央处理器的空闲时间 。以百分比表示。
如果 r经常大于 4 ,且id经常小于40,表示中央处理器的负荷很重。 如果bi,bo 长期不等于0,表示物理内存容量太小。
四、Linux 服务器的内存泄露和回收内存的方法
1、内存泄漏的定义:
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
2、内存泄露的危害
从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的`是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。存在内存泄漏问题的程序除了会占用更多的内存外,还会使程序的性能急剧下降。对于服务器而言,如果出现这种情况,即使系统不崩溃,也会严重影响使用。
3、内存泄露的检测和回收
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。在 Linux 或者 unix 下,C、C++语言是最使用工具。但是我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。而且程序退出时,我们无法获知任何内存泄漏信息。
使用kill命令
使用Linux命令回收内存,我们可以使用Ps、Kill两个命令检测内存使用情况和进行回收。在使用超级用户权限时使用命令“Ps”,它会列出所有正在运行的程序名称,和对应的进程号(PID)。Kill命令的工作原理是:向Linux *** 作系统的内核送出一个系统 *** 作信号和程序的进程号(PID)。
应用例子:
为了高效率回收内存可以使用命令ps 参数v:
代码如下:
[root@>问题一:服务器端口怎么更改呢 详细步骤如下:看能否对你有所帮助1、通过注册表修改,打开“开始→运行”,输入“regedit”,打开注册表,进入以下路径: [HKEY_LOCAL_MACHINE--SYSTEM CurrentControlSet--Control--Terminal Server Wds--rdpwd--Tds--tcp],看见PortNamber值了吗?其默认值是3389,修改成所希望的端口即可,例如12345。 再打开[HKEY_LOCAL_MACHINE SYSTEM--CurrentContro1Set--Control--Tenninal Server--WinStations--RDP--Tcp],将PortNumber的值(默认是3389)修改成端口12345。 2、也可以采用诸如端口修改软件实现,自己搜索一下。
问题二:如何修改windows服务器登陆端口号 一般windows服务器默认的远程连接的端口号是3389,有时我们需要更改这个端口号。
警告 :注册表编辑器使用不当可导致严重问题,可能需要重新安装 *** 作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。
1、首先,登陆服务器选择系统桌面中的“开始”、“运行”命令,从d出的系统运行框中,输入字符串命令“ regedit ”,单击“确定”按钮后,打开本地工作站的系统注册表编辑界面;
展开 HKEY_LOCAL_MACHINE 注册表分支,从其后d出的分支列表中依次选中
SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp
在 tcp 子键所对应的右侧显示区域中,我们会看到一个名为 PortNumber 的子键,这个子键其实就是用来定义远程桌面端口号码的,将该子键的数值设置成其他端口号码,例如可以将其数值设置成“ 9999 ”
2、 完成数值修改 *** 作后,我们再将鼠标定位于注册表分支
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
在RDP-Tcp子键所对应的右侧显示区域中,我们同样会看到一个名为PortNumber的子键,把该子键的数值也要一并修改过来,例如这里我们也要将它的数值修改成“9999”
3、然后修改防火墙
从控制面板进入防火墙,然后点击高级设置,入站规则-》新建规则-》规则类型-》端口-》下一步-》特定本地端口-》填写你更改的端口-》确定
然后重启就可以了。
问题三:如何修改服务器远程连接端口 服务器租用后,如果使用默认的端口连接服务器,有可能导致不安全。现在的黑客攻击也有了专门针对服务器默认远程端口3389的攻击,如果遇到这种情况,端口被攻击,就会导致服务器远程连接不上,这个时候我们需要修改服务器远程连接的端口来避免这个情况的发生。
哪么如何修改服务器远程连接的端口呢。
windows系统服务器修改服务器远程连接端口的方法:
windows系统远程连接端口默认的是3389,windows下默认端口的修改分为两大步骤
一、修改注册表
1、开始--运行--regedit
2、打开注册表的HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/CONTROL/TERMINAL SERVER/WDS/RDPWD/TDS/TCP
右边键值中 PortNumber这个值修改为需要修改的端口数注意使用十进制(例 34678)
3、打开注册表的HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/CONTROL/TERMINAL SERVER/WINSTATIONS/RDP-TCP/
右边键值中 PortNumber 这个值修改为需要修改的端口数注意使用十进制(例 34678)
4、端口修改完毕重新启动服务器设置生效
5、这样使用3389远程桌面连接连接的时候
就应该填写 IP:34678 即 ip 后面跟冒号和端口号 例如2021030117:34678
二、修改防火墙,打开所需的端口(例如打开端口34678)
做完这两步之后。服务器重启后。远程端口的修改就算完成了。以后请记得使用修改后的端口去连接服务器,万一端口忘记,就需要机房的工作人员把服务器接上显示器然后在本地登陆再修改这些端口设置来恢复了。因为涉及到要到机房接显示器处理。因此可能影响的时间比较长。客户需要牢牢记得服务器远程修改后的端口。避免出现这一问题
问题四:怎样更改端口号 修改tomcat端口号的方法:
修改Serverxml文件,把8080端口改成80就可以了。
8080是Tomcat服务器的默认的端口号。我们可以通过修改Tomcat服务器的conf目录下的主配置文件serverxml来更改用记事本打开serverxml文件,找到如下部分:
以下为引用的内容:
将其中的port=8080更改为新的端口号即可,如将“8080”改为“9080”等。
问题五:如何进行服务器端口的设置 为了保证服务器的应用和安全,需要进行端口设置,使端口与提供的服务相匹配,并且要关闭不需要的端口。进行服务器端口的设置,可以在 *** 作系统中进行设置,也可以通过一些工具软件进行设置。在系统中进行设置右击网上邻居图标,选择属性命令,在d出的对话框中选择本地连接,单击鼠标右键选择属性,d出本地连接属性对话框,在此连接使用下列选定的组件区域选中Internet协议(TCP/IP),再单击属性按钮,在d出的Internet协议(TCP/IP)属性对话框中单击高级按钮,又d出一个TCP/IP属性对话框,选择选项选项卡,在可选的设置区域选择TCP/IP筛选,单击属性按钮,打开TCP/IP筛选对话框,,在其中添加需要开放的TCP,UDP端口即可。通过工具软件进行设置在系统中设置端口很简单,但还有更加简单的方法,那就是使用设置端口的工具软件。使用这类软件的好处是设置 *** 作简单,同时还有日志功能,例如使用PortBlocker软件,这款软件主要针对同时连接局域网和互联网的用户,当局域网服务器与互联网连接以后,管理员就有必要更加注意端口的设置。这款软件专门检测和拦截来自互联网的通信,如果发现有任何连接未开放端口的通信请求,该软件就会d出窗口报告IP地址和要访问的端口。
问题六:如何修改服务器的3389端口 注册表有2个地方需要修改:
第一处:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]
PortNumber值,默认是3389,修改成所希望的端口,比如1314
第二处:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
PortNumber值,默认是3389,修改成所希望的端口,比如1314
完后重启服务器 OK!!
问题七:如何更改linux服务器端口号 linux服务器有很多端口,不知道你要修改那些端口下面是安全类端口修改:
Linux服务器安全之更改默认端口
原创内容,转载请注明出处: myzhenai/post/1783 myzhenai/thread-16180-1-1
关键字: Kloxo-mr修改默认端口 更改Kloxo-mr 7777 7778端口 kloxo自定义端口 Linux修改ssh端口 Linux修改ftp端口 Centos修改ssh端口 Centos修改ftp端口 修改ssh默认22端口 修改FTP默认21端口 更改pureftpd默认端口 更改vsftpd默认端口 更改proftpd默认端口 更改SSH默认端口 更改FTP默认端口
Linux的安全性能相对于windows来说要高一些,但这并不代表不会受到攻击功侵入,你只要留意看看/var/log/里的各种日志就会发现每天都会有大量的ip在扫描你的ssh,ftp等端口所以为了更加安全,我们可以将这些默认的端口修改为自定义的端口我们先来说ssh和ftp
SSH
# vi /etc/ssh/sshd_config
Port
即是你需要的端口号,建议修改个大点的端口,以免和其他端口相冲突
vsftpd
# find / -name vsftpdconf
# vi //vsftpdconf
//是vsftpdconf所在目录,在vsftpdconf中增加 listen_port= 最后这个星号这里是自定义的端口号
proftpd
# vi /etc/proftpdconf
Port 21
Port
pure-ftpd
# vi /etc/pure-ftpd/pure-ftpdconf
# Bind 127001,21
Bind 0000,
将# Bind前的#去掉,并将127替换成0 将21改成你指定的端口
# vi /etc/services
将21和22端口都修改成指定的端口,22端口要改成与sshd_config里的端口一致21端口要改成pure-ftpdconf里一致的端口以此类推…
# iptables -I INPUT -p tcp --dport 22 -j DROP
# iptables -I INPUT -p tcp --dport 25 -j DROP
# iptables -I INPUT -p tcp --dport 21 -j DROP
# iptables -I INPUT -p tcp --dport 110 -j DROP
# iptables -I FORWARD -p tcp --dport 22 -j DROP
# iptables -I FORWARD >>
问题八:如何修改浏览器>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)