服务器死机原因和应对方法

服务器死机原因和应对方法,第1张

通常死机/卡死是服务器资源耗尽导致的,
一般排除硬件问题就是:系统问题,IIS出错,程序问题,中木马病毒,网站访问量过大导致带宽内存等资源不足造成的,网站环境配置问题。
解决办法:重启服务器、也可以重装系统重新配置环境或者是升级服务器配置。可以结合日志,对应去排查。可以设置定时重启计划,能增强机器稳定性的; *** 作系统定时补丁。

通常用WSGI方式启动,ngix连接django方式。很少出现这样的情形。 如果内存耗尽,先要确定原因。如果你的虚拟机内存太少,就加内存。 如果内存超过1个GB,还有内存耗尽的问题,应该django里的view没有设计好。其中有内存泄露。 第一件事情当然是把这部分代码找出来改进就可以了。 最后一种办法,在不得已的情况下,定时重新启动django的wsgi server,这样就避免了内存耗尽,可以在晚上特定的时候来重新启动。这样影响最小。

楼主你好
句柄地址(稳定)→记载着对象在内存中的地址,对象在内存中的地址(不稳定),实际对象,这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
而楼主的服务器是前天刚重起过的,现在却又那么高的句柄数,你的服务器是做什么用的呢, 要不就是您的服务器中毒了,有后门了。
呵呵,海腾IDC--中尉

Denial of Service,简称DoS,造成DoS攻击的行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。

常见的DoS攻击有计算机网络 带宽攻击 连通性攻击

带宽攻击 指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。</br>
连通性攻击 指用大量的连接请求冲击计算机,使得所有可用的 *** 作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。

常用攻击手段有:SYN Flood、WinNuke、死亡之Ping、ICMP/SMURF、Finger炸d、Land攻击、Ping洪流、Rwhod、Teardrop、TARGA3、UDP攻击等。

书中以SYN Flood攻击为例,详细介绍这种典型的DoS攻击:

SYN Flood是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

SYNFlood攻击利用了TCP协议中的三次握手(Three-way Handshake)

SYN Flood攻击的具体原理:</br>
TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成)。

这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。这段时间的长度称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30s~2min);</br>
一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。

即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。</br>
如果服务器的TCP/IP栈不够大,最后的结果往往是堆栈溢出崩溃——即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬正常客户的请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)

拒绝服务攻击主要是利用了系统的一些漏洞。漏洞利用拒绝服务攻击是一种利用漏洞造成软件不能正常运行的攻击方式。这种拒绝服务不依赖大量傀儡机,也不需要发送大量访问请求,而仅仅是利用目标节点软件的安全漏洞,通过精心构造恶意数据包,造成目标节点软件不能有效运行。

分布式拒绝服务(DDoS:Distributed Denial of Service)攻击是一种资源耗尽型攻击,通常也被称作洪水攻击。</br>
利用分布于网络上的大量节点向同一目标节点发起的引起目标节点资源被大量消耗而不能正常对外提供服务的网络攻击方式。

分布式拒绝服务攻击主要是指那些借助外界的平台,如客户或者是服务器本身,把不同的计算机系统联合在一起,对其进行攻击,进而加倍地增强拒绝攻击的成果。一般情况,攻击者将分布式拒绝服务攻击的主控程序安装在一个用于控制的计算机上,将受控程序安装部署在因特网的多台计算机上。主控程序可以与受控程序进行通信并控制受控程序的行为,当主控程序发送特定的指令时,受控程序即可根据指令发动攻击。

DDoS攻击通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。这种攻击方式有以下几种:

分布式拒绝服务攻击的步骤如下:</br>
第1步:攻击者使用扫描工具扫描大量主机以寻找潜在入侵目标;</br>
第2步:黑客设法入侵有安全漏洞的主机并获取控制权。这些主机将被用于放置后门、守护程序甚至是客户程序;</br>
第3步:黑客在得到入侵计算机清单后,从中选出满足建立网络所需要的主机,放置已编译好的守护程序,并对被控制的计算机发送命令;</br>
第4步:黑客发送控制命令给主机,准备启动对目标系统的攻击;
第5步:主机发送攻击信号给被控制计算机开始对目标系统发起攻击;
第6步:目标系统被无数伪造的请求所淹没,从而无法对合法用户进行响应,DDoS攻击成功。

DDoS攻击的效果是非常明显的,由于整个过程是自动化的,攻击者能够在5s钟内入侵一台主机并安装攻击工具。也就是说,在短短的一小时内可以入侵数千台主机,并使某一台主机可能要遭受1000MB/s数据量的攻击,这一数据量相当于104亿人同时拨打某公司的一部电话号码。

分布式反射拒绝服务攻击(DRDoS:Distributed Reflection Denial of Service)是一种较新的资源耗尽型拒绝服务攻击。

与分布式拒绝服务攻击使用伪造源IP地址不同,分布式反射拒绝服务攻击的来源IP地址全是真实地址,这些真实的网络节点本身并没有安全漏洞,而是利用TCP三次握手来实现的。

首先,攻击者通过控制的傀儡机使用受害者IP地址作为源地址向任意处于活动状态的网络节点(如核心路由器、域名服务器、大型网站等)发送带有SYN标记的数据包,也就是TCP三次握手的第一步;</br>
处于活动状态的网络节点接收到伪造源IP地址的数据包后,将会按照协议要求向受害者进行应答,发送带有SYN、ACK标记的应答数据包。当攻击者使用大量傀儡机同时发起攻击时,即完成了一次分布式反射拒绝服务攻击。

分布式反射拒绝服务攻击最典型的攻击是Smurf攻击:</br>

第一步:攻击者向被利用网络A的 广播地址 发送一个ICMP协议的“echo”请求数据报,该数据报源地址被伪造成1025489。</br>
第二步:网络A上的所有主机都向该伪造的源地址返回一个“echo”响应,造成该主机服务中断。</br>

现在的拒绝服务攻击很多都是利用工具自动化完成的。</br>
攻击者控制某些主机不停地发送大量数据包给某服务器,造成服务器资源耗尽,一直到主机崩溃。CC主要是用来消耗服务器资源的。每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,模拟多个用户(多少线程就是多少用户)不停地访问那些需要大量数据 *** 作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU负荷长时间处于100%,永远都有处理不完的连接,直至网络拥塞,正常的访问被中止。

拒绝服务攻击通常是很难防范的,不过也有一些防护措施:</br>
1加强用户的安全防范意识,关闭不必要的网络接口,降低因个人疏忽造成的不安全因素,安装防范功能较强的软件,对计算机做定时的安全扫描工作;</br>
2增加安全防范手段,了解和掌握可以有效地防治安全漏洞的软件,使用一些专门的漏洞检查工具进行问题的检测,如网络测试仪、流量测试仪等,及时地找出修复漏洞的方法和措施,减少不必要的损失。</br>
3正确运用安全防范工具,及时地使用网络检测软件对不安全因素进行检测,使用那些专门检测网络安全隐患的软件,定期进行检测。</br>

受影响。tcp是一种面向连接的、可靠的、基于字节流的传输层通信协议TCP是一个非常复杂的传输协议,连接数量受文件句柄影响,当文件描述符耗尽的时候,设置一个kMaxConnections最大连接数,当连接超过设定值时,直接关闭当前这个fd即可。

linux删除文件后没有释放空间\x0d\ \x0d\今天发现一台服务器的home空间满了,于是要清空没用的文件,当我删除文件后,发现可用空间没有变化\x0d\ \x0d\os:centos47\x0d\\x0d\现象:\x0d\ \x0d\发现当前磁盘空间使用情况:\x0d\ \x0d\[root@ticketb ~]# df -h\x0d\Filesystem Size Used Avail Use% Mounted on\x0d\/dev/sda1 981M 203M 729M 22% /\x0d\none 16G 0 16G 0% /dev/shm\x0d\/dev/sda9 29G 37M 27G 2% /tmp\x0d\/dev/sda7 49G 19G 27G 42% /usr\x0d\/dev/sda8 29G 145M 26G 6% /var\x0d\/dev/mapper/vghome-lvhome\x0d\ 20G 19G 11M 100% /home\x0d\/dev/mapper/vgoradata-lvoradata\x0d\ 144G 48G 90G 35% /u01/oradata\x0d\/dev/mapper/vgbackup-lvbackup\x0d\ 193G 78G 175G 5% /u01/backup\x0d\\x0d\通过以下的命令找到没用的文件,然后删除\x0d\\x0d\[root@ticketb ~]# find /home/oracle/admin/dbticb/udump/ -name "dbticb_trc" -mtime +50 | xargs rm -rf\x0d\ \x0d\然后在查看磁盘空间使用情况,发现没有/home空间没有变化\x0d\ \x0d\[root@ticketb ~]# df -h\x0d\Filesystem Size Used Avail Use% Mounted on\x0d\/dev/sda1 981M 203M 729M 22% /\x0d\none 16G 0 16G 0% /dev/shm\x0d\/dev/sda9 29G 37M 27G 2% /tmp\x0d\/dev/sda7 49G 19G 27G 42% /usr\x0d\/dev/sda8 29G 145M 26G 6% /var\x0d\/dev/mapper/vghome-lvhome\x0d\ 20G 19G 11M 100% /home\x0d\/dev/mapper/vgoradata-lvoradata\x0d\ 144G 48G 90G 35% /u01/oradata\x0d\/dev/mapper/vgbackup-lvbackup\x0d\ 193G 78G 175G 5% /u01/backup\x0d\ \x0d\这个郁闷啊,明明删除文件了,怎么空间没有被释放啊,rm命令应该是直接删除啊,在查看下/home下还有什么占用空间\x0d\ \x0d\[root@ticketb ~]# du -h --max-depth=1 /home\x0d\16K /home/lost+found\x0d\26G /home/oracle\x0d\26G /home\x0d\ \x0d\可这里显示空间已经释放了啊,于是google下,\x0d\ \x0d\未释放磁盘空间原因:\x0d\ \x0d\在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink)然而假设文件是被\x0d\打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是oracle的告警log文件\x0d\删除的时候文件应该正在被使用\x0d\ \x0d\解决方法\x0d\ \x0d\首先获得一个已经被删除可是仍然被应用程序占用的文件列表,例如以下所看到的:\x0d\\x0d\[root@ticketb ~]# lsof |grep deleted\x0d\oracle 12639 oracle 5w REG 253,0 648 215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637trc (deleted)\x0d\oracle 12639 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticblog (deleted)\x0d\oracle 12639 oracle 7u REG 253,0 0 36282 /home/oracle/oracle/product/1020/db_1/dbs/lkinstdbticb (deleted)\x0d\oracle 12639 oracle 8w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticblog (deleted)\x0d\oracle 12641 oracle 5w REG 253,0 648 215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637trc (deleted)\x0d\oracle 12641 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticblog (deleted)\x0d\。\x0d\。\x0d\。\x0d\oracle 23492 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticblog (deleted)\x0d\oracle 23492 oracle 7u REG 253,0 0 36282 /home/oracle/oracle/product/1020/db_1/dbs/lkinstdbticb (deleted)\x0d\oracle 23492 oracle 8w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticblog (deleted)\x0d\oracle 23494 oracle 10u REG 253,0 0 36307 /home/oracle/oracle/product/1020/db_1/dbs/lkinstrmandb (deleted)\x0d\\x0d\从输出结果能够看到/home/oracle/admin/dbticb/bdump/alert_dbticblog还被使用,未被释放空间\x0d\ \x0d\怎样让进程释放呢?\x0d\ \x0d\一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自己主动回收磁盘空间\x0d\我这个环境有非常多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险非常大\x0d\ \x0d\当linux打开一个文件的时候,Linux内核会为每个进程在/proc/ 『/proc/nnnn/fd/文件夹(nnnn为pid)』建立一个以其pid\x0d\为名的文件夹用来保存进程的相关信息,而其子文件夹fd保存的是该进程打开的全部文件的fd(fd:file descriptor)。\x0d\kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件。\x0d\这是一项高级技术,仅到管理员确定不会对执行中的进程造成影响时使用。应用程序对这样的方\x0d\式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题\x0d\ \x0d\所以我还是采用停应用来解决\x0d\ \x0d\restart oracle数据库,发现/home/oracle/admin/dbticb/bdump/alert_dbticblog相应的空间被释放\x0d\ \x0d\在查看磁盘空间的使用情况,发现空间已经回收了\x0d\\x0d\[root@ticketb ~]# df -h\x0d\Filesystem Size Used Avail Use% Mounted on\x0d\/dev/sda1 981M 203M 729M 22% /\x0d\none 16G 0 16G 0% /dev/shm\x0d\/dev/sda9 29G 37M 27G 2% /tmp\x0d\/dev/sda7 49G 19G 27G 42% /usr\x0d\/dev/sda8 29G 145M 26G 6% /var\x0d\/dev/mapper/vghome-lvhome\x0d\ 20G 26G 16G 15% /home\x0d\/dev/mapper/vgoradata-lvoradata\x0d\ 144G 48G 90G 35% /u01/oradata\x0d\/dev/mapper/vgbackup-lvbackup\x0d\ 193G 78G 175G 5% /u01/backup\x0d\\x0d\ok,问题解决,然后做下收尾工作就可以\x0d\ \x0d\-------------------------------------------------------------------------------------------------\x0d\ \x0d\学习下lsof命令\x0d\ \x0d\lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,不论什么事物都是文件,\x0d\设备是文件,文件夹是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。\x0d\ \x0d\lsof是linux最常常使用的命令之中的一个,通常的输出格式为:\x0d\ \x0d\引用\x0d\COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。

关于Linux下系统,进程能最大能打开的文件描述符数看过好多文章,但大都没有完整,详细说明每个值表示什么意思,在实践中该怎么设置

如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作

max-file 表示系统级别的能够打开的文件句柄的数量,是对整个系统的限制,并不是针对用户的。

ulimit -n 控制进程级别能够打开的文件句柄的数量,提供对shell及其启动的进程的可用文件句柄的控制,这是进程级别的。

对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。

一般如果遇到文件句柄达到上限时,会碰到"Too many open files"或者Socket/File: Can’t open so many files等错误。

相关的3个文件:
/proc/sys/fs/file-max
/proc/sys/fs/file-nr
/etc/security/limitsconf

/proc/sys/fs/file-max
Linux系统级别限制所有用户进程能打开的文件描述符总数。
max-file 表示系统级别的能够打开的文件句柄的数量,是对整个系统的限制,并不是针对用户的。

/etc/security/limitsconf
用户级别的限制是通过可以通过命令ulimit命令和文件/etc/security/limitsconf

/proc/sys/fs/file-nr 该参数是只读的,不能修改。

file-nr的值由3部分组成:
1,已经分配的文件描述符数;
2,已经分配但未使用的文件描述符数;
3,内核最大能分配的文件描述符数

/proc/${pid}/fd

众所周知,在相应进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd。
当然有些可能不是本进程自己打开的,如通过fork()从父进程继承而来的。

那么这个socket:后面的一串数字是什么呢?其实是该socket的inode号。

那么,知道了某个进程打开的socket的inode号后,我们可以做什么呢?
这就涉及到/proc/net/tcp(udp对应/proc/net/udp)文件了,其中也列出了相应socket的inode号通过比对此字段,我们能在/proc/net/tcp下获得此套接口的其他信息,如对应的<本地地址:端口号,远端地址:端口号>对,窗口大小,状态等信息。
具体字段含义详见net/ipv4/tcp_ipv4c 中的 tcp4_seq_show 函数。

如果socket创建了,没有被使用,那么就只会在/proc/pid/fd下面有,而不会在/proc/net/下面有相关数据。

目录中的每一项都是一个符号链接,指向打开的文件,数字则代表文件描述符。
其中0 = /dev/null ,1 = stdout, 2 = stderr,用cat或tail查看即可。

Number of file descriptors: different between /proc/sys/fs/file-nr and /proc/$pid/fd
>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10683169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存