求教服务器tcp连接数被占满的有关问题

求教服务器tcp连接数被占满的有关问题,第1张

我问了在约APP的专家,修改上述限制的最简单的办法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n
上述命令中,在中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败,实际上是因为在中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。
第一步,修改/etc/security/limitsconf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪个用户的打开文件数限制,可用’'号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。
第二步,修改/etc/pamd/login文件,在文件中添加如下行:
session required /lib/security/pam_limitsso
这是告诉Linux在用户完成系统登录后,应该调用pam_limitsso模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limitsso模块就会从/etc/security/limitsconf文件中读取配置来设置这些限制值。修改完后保存此文件。
第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)12158个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rclocal脚本,在脚本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。
完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用 ulimit-n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit -n命令已经将用户可同时打开的文件数做了限制。由于通过ulimit-n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次 ulimit-n设置的值,因此想用此命令增大这个限制值是不可能的。所以,如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查找是否使用了ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。
通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。
2、修改网络内核对TCP连接的有关限制(参考对比下篇文章“优化内核参数”)
在Linux上编写支持高并发TCP连接的客户端通讯处理程序时,有时会发现尽管已经解除了系统对用户同时打开文件数的限制,但仍会出现并发TCP连接数增加到一定数量时,再也无法成功建立新的TCP连接的现象。出现这种现在的原因有多种。
第一种原因可能是因为Linux网络内核对本地端口号范围有限制。此时,进一步分析为什么无法建立TCP连接,会发现问题出在connect()调用返回失败,查看系统错误提示消息是“Can’t assign requestedaddress”。同时,如果在此时用tcpdump工具监视网络,会发现根本没有TCP连接时客户端发SYN包的网络流量。这些情况说明问题在于本地Linux系统内核中有限制。其实,问题的根本原因在于Linux内核的TCP/IP协议实现模块对系统中所有的客户端TCP连接对应的本地端口号的范围进行了限制(例如,内核限制本地端口号的范围为1024~32768之间)。当系统中某一时刻同时存在太多的TCP客户端连接时,由于每个TCP客户端连接都要占用一个唯一的本地端口号(此端口号在系统的本地端口号范围限制中),如果现有的TCP客户端连接已将所有的本地端口号占满,则此时就无法为新的TCP客户端连接分配一个本地端口号了,因此系统会在这种情况下在connect()调用中返回失败,并将错误提示消息设为“Can’t assignrequested address”。有关这些控制逻辑可以查看Linux内核源代码,以linux26内核为例,可以查看tcp_ipv4c文件中如下函数:
static int tcp_v4_hash_connect(struct sock sk)
请注意上述函数中对变量sysctl_local_port_range的访问控制。变量sysctl_local_port_range的初始化则是在tcpc文件中的如下函数中设置:
void __init tcp_init(void)
内核编译时默认设置的本地端口号范围可能太小,因此需要修改此本地端口范围限制。
第一步,修改/etc/sysctlconf文件,在文件中添加如下行:
netipv4ip_local_port_range = 1024 65000
这表明将系统对本地端口范围限制设置为1024~65000之间。请注意,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。修改完后保存此文件。
第二步,执行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系统没有错误提示,就表明新的本地端口范围设置成功。如果按上述端口范围进行设置,则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接。
第二种无法建立TCP连接的原因可能是因为Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制。此时程序会表现为在 connect()调用中阻塞,如同死机,如果用tcpdump工具监视网络,也会发现根本没有TCP连接时客户端发SYN包的网络流量。由于 IP_TABLE防火墙在内核中会对每个TCP连接的状态进行跟踪,跟踪信息将会放在位于内核内存中的conntrackdatabase中,这个数据库的大小有限,当系统中存在过多的TCP连接时,数据库容量不足,IP_TABLE无法为新的TCP连接建立跟踪信息,于是表现为在connect()调用中阻塞。此时就必须修改内核对最大跟踪的TCP连接数的限制,方法同修改内核对本地端口号范围的限制是类似的:
第一步,修改/etc/sysctlconf文件,在文件中添加如下行:
netipv4ip_conntrack_max = 10240
这表明将系统对最大跟踪的TCP连接数限制设置为10240。请注意,此限制值要尽量小,以节省对内核内存的占用。
第二步,执行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系统没有错误提示,就表明系统对新的最大跟踪的TCP连接数限制修改成功。如果按上述参数进行设置,则理论上单独一个进程最多可以同时建立10000多个TCP客户端连接。
3、使用支持高并发网络I/O的编程技术
在Linux上编写高并发TCP连接应用程序时,必须使用合适的网络I/O技术和I/O事件分派机制。
可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步 I/O是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。异步I/O的技术就是使用AIO。
从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期Linux内核的AIO技术实现是通过在内核中为每个 I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)。
综上所述,在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。
内核参数sysctlconf的优化
/etc/sysctlconf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要,RHEL默认提供的最好调整。
推荐配置(把原/etc/sysctlconf内容清掉,把下面内容复制进去):
netipv4ip_local_port_range = 1024 65536
netcorermem_max=16777216
netcorewmem_max=16777216
netipv4tcp_rmem=4096 87380 16777216
netipv4tcp_wmem=4096 65536 16777216
netipv4tcp_fin_timeout = 10
netipv4tcp_tw_recycle = 1
netipv4tcp_timestamps = 0
netipv4tcp_window_scaling = 0
netipv4tcp_sack = 0
netcorenetdev_max_backlog = 30000
netipv4tcp_no_metrics_save=1
netcoresomaxconn = 262144
netipv4tcp_syncookies = 0
netipv4tcp_max_orphans = 262144
netipv4tcp_max_syn_backlog = 262144
netipv4tcp_synack_retries = 2
netipv4tcp_syn_retries = 2
这个配置参考于cache服务器varnish的推荐配置和SunOne 服务器系统优化的推荐配置。
varnish调优推荐配置的地址为:>远古VOD50破解版常见问题及解决方法
1。“用户未登录,请先登录!”;
注册个用户名后再登陆,或在后台设置为“无需登陆模式”
2。区域设置错误该提示“对不起您不能访问本系统资源,请确认您的访问地址!”;
在后台设置了
3。“你的权限不能访问此节目!”;
用户等级不够或节目等级设置过高。可在后台修改用户等级和节目等级。
如果安装了网吧IP11插件,检查“网吧用户”的组等级是否为10级。
如果安装了网吧IP11插件,检查网吧IP的等级设置是否合理。
4。“此帐号没有播放权限!”或“你没有加入任何播放节目组!”;
用户不在“播放用户组”。可在后台修改编辑。
如果安装了网吧IP11插件,检查“网吧用户”是否在“播放用户组”。
5。“登录用户错误,请确认!”
检查程序playerasp是否出错;
检查数据库CusTomer表的30个字段是否含有非法字符。
6。“服务器连接数已满!”
加密狗问题。也可能是破解不成功 或IIS设置问题 如果弄不好建议重装远古 10分钟都不要
7。“非共享用户重复点播!”
该用户使用方式为“个人独享”用户并已经在线,而你是重复点播。
系统被盗链,安装防盗链II。
如果安装了网吧IP插件,检查“网吧用户”的使用方式应为“多人共享”。
8。“帐户已被停用!”
如果没安装防盗链II,后台检查该用户“帐户状态”是否为“启用”。
如果没安装防盗链II,再重新点播一次即可。
9。“500内部服务器错误”
你是否改变过计算机名称;
站点所在的文件目录是否自定义了安全属性;
安装了域控制器后是否调整了域策略。如果是其中的一种情况,请一一将改变的参数设置回来看是否解决问题;
10。“404 URL资源没有找到”
1)如果是在用了一段时间出此提示
可能是资源服务器里没有这个资源,或资源的路径已被更改。
2)如果安装后既出此提示
检查安装文件的安装顺序(用帮助文件里的那个顺序)。
检查IIS的设置(不用多说了吧)
检查IIS的网站-->webmedia-->属性-->虚拟目录-->配置-->映射-->扩展名里是否有
das fas tfs tss这4个扩展名。
3)如果还不行 最笨的方法就是重新装一便远古,如果SQL没有出问题 就只重装远古
按帮助文件里的那个顺序重装。
4)安装完后把破解文件要复制到C盘目录下 添加到启动选项里面 弄好了之后重起电脑
11。安装完成之后 不能播放
这个问题一直没有解决办法 有时候可以直接播放有时候播放不出来
播放不出来看不到画面的时候 你点停止按扭 然后再点播放按扭
12外网
如果想让自己的外网能访问最好有固定的IP 网吧就不用说了 端口需要映射 网管应该知道怎么弄吧
如果是内网 你可以下载一个花生壳软件 申请一个免费域名 外网访问自己的免费域名就行了
具体步骤网上找资料
13有人问 服务器的系统是什么格式
这个NTSF和FAT的都可以 这个没关系
14安装远古最好不要用GHOST系统 最好自己装一个 你装好了 之后可以用GHOST做备份
15 新建的目录不能超过4个字
16不小心停了后台账号求补救方法
修改数据库字段,把customer表后台管理用户行的status字段改成1
17远 古多服务器,重做系统后,怎么恢复数据库
打开SQL管理器 找到远 古的数据库 然后右键备份数据库
装完系统后搞好远 古 先别导入数据库
直接建立一个和远 古数据库一样的空数据库 然后还原之前备份的数据库可以了
18换模版后主页打不开
检查dbconnasp是不是你自己的路径、密码和登陆名
19关于首页修改的部分程序的位置:(大多数模版是这些位置)
a改用户登陆框userinfoincasp
b改右边的“点播排行”toplistincasp
c改右边的“更新列表”newgamesincasp
d改上边的“分类列表”headincasp
20。在点播是如果是没有d出播放器的黑窗口就d出提示框,那就是asp程序的问题,可以通过修改asp程序来解决。
但是,如果在d出播放器的黑窗口就d出出错提示框,那就是验证程序的问题了,如果后台程序的设置没问题的话,
就麻烦了!404就属于这类。
20。数据库的几个关键表(必须备份的)
aCusTomer记录客户信息
bCusTomer_Group客户和组关系表
cGamePrice节目价格信息
dGroupInfo用户组信息(没装WBIP就不必备份这个)
eProg_Server节目文件分布表
fProgInfo节目信息表
gStreamServerAdapter点播服务器适配器信息
hStreamServerIP点播服务器地址信息
iStreamServerList负载平衡服务器信息
jSysConfig系统配置变量
kTypeInfo节目类型表
22扣点算法:
在你点播的一瞬间,程序就先计算你上一次的点播扣点量,算好扣好以后,才开始播放你这次点播的如果扣点后,程序发现你现在的点数不够看完你本次点播的,就不给你播放了
算法:扣点数=上次点播的价格折扣率用户实际观看的时间/这部片的总片长时间
折扣率100就1
折扣率90就09
比如:上次客人点播一部4点的,这部有93分钟,客人看了17分钟,这个客人用的帐号折扣为100那么:
扣点=4117/93=073118279
就扣他073118279点
23全部页 适合自由鸟的那个摸版。
1。把这2个文件装在Program Files\VIEWGOOD\WebVOD\WebMedia\oemui\vod下。
2。用文本编辑器打开Program Files\VIEWGOOD\WebVOD\WebMedia\oemui\headincasp

<% rsDatamovenext if rsDataEOF then exit do loop
rsDataClose
%> 的后面加上:
<img border="0" src="/img/head_menu_jt2gif"> <a href="//oemui/vod/progmainaspAllID=1" class="head">全部</a>
就可以啦!
24午夜剧场 适用范围:这个适合那个SunFun
功能:在0:00~6:00,“午夜剧场”才在不够等级的网吧IP的页面上显示。不是网吧IP的访问不受这个限制。 等级够(IP等级大于等级)的也不受这个限制。
安装要求:必须装Sp1和WBIP11
打开数据库,找到TypeInfo表,打开表,查“午夜剧场”的Type_ID是多少。
关闭数据库,分别打开这3个asp,查找里面的,把换成“午夜剧场”的Type_ID,保存。覆盖掉原来 的,就可以啦。
25午夜剧场自动开关 适用范围:这个适合那个SunFun
功能:在0:00~6:00,“午夜剧场”才在不够等级的网吧IP的页面上显示。不是网吧IP的访问不受这个限制。 等级够(IP等级大于等级)的也不受这个限制。
安装要求:必须装Sp1和WBIP11
打开数据库,找到TypeInfo表,打开表,查“午夜剧场”的Type_ID是多少。
关闭数据库,分别打开这3个asp,查找里面的,把换成“午夜剧场”的Type_ID,保存。覆盖掉原来 的,就可以啦。
原地址:>这里要澄清一下,连接数上限不会导致服务器不稳定,恰恰相反,连接数上限是保证服务器稳定性的重要措施!
由于是共享环境,多个用户共用同一台服务器,试想一下,如果某个用户程序出现问题,而系统又不加限制,那么这一个用户会迅速将全部服务器资源耗尽,同一服 务器上的其他用户就会受到严重影响,甚至网站无法访问。所以,限制措施是为了有效隔离出错网站使之不对其他用户产生影响,是增强服务器稳定性的。
总结过去经验,达到连接数上限的原因可能有以下几点:
1、程序出现死循环:
一旦出现程序死循环,apache连接数就得不到释放,因此,在有限的资源里越积累越多,导致apache的连接数达到上限,因此无法正常浏览网站。
2、数据库空间满了:
有的用户用数据库来做一些论坛等交流的程序,这样,一旦数据库空间满了,用户在通过php执行insert等sql语句时候造成数据库堵塞,从而造成资源达到上限。
3、调用数据库程序问题:
调用数据库的程序逻辑不合理,对数据库 *** 作以后没有及时释放对数据库的连接,因此累计起来,很快就能达到资源上限了。
值得指出的是目前域名通所有服务器的连接数上限可以容纳日访问量数十万独立IP的网站
如果您的网站访问量很小,却总是提示说达到连接数上线,请您仔细检查程序,依据以往的经验,这样的网站都是程序有问题或是用户利用空间在做调试。

当出现**不能播放现象时请不要首先抱怨“这建站系统这么烂,我的**又看不了了!”,而应该判断一下是否你添加**记录时添加错了地址,特别是添加**时使用“**服务器”功能的则最容易出现错误!并且有可能有以下几种错误现象。
A、选择错误的**服务器
比如你在你的建站后台添加了有两台**服务器,分别如下:
**服务器一 : \\19216801\**\动作片\
**服务器二 : \\19216801\**\爱情片\
而这时你要添加的一部**是这样的路径:
\\19216801\**\爱情片\我的爱人\1rmvb
如果你在添加时选择的**服务器是“**服务器一”,并且输入的路径又是“我的爱人\1rmvb”,当添加后这**肯定是无法播放的!因为最终的**路径成了“\\19216801\**\动作片\我的爱人\1rmvb”,非常明显这路径是错误的所以导致无法播放这部**了!B、输入错误的**地址还是以上面的服务器例子来说,在你添加“我的爱人”这部**时,如果你是按照**服务器功能来添加的,那么**服务器你应该选择“**服务器二”并且**路径地址应该输入“我的爱人\1rmvb”[注意:前面没有“\”这个字符],而有些人可能一不小心或者根本不懂就直接输入了“\\19216801\**\爱情片\我的爱人\1rmvb”或者“**\爱情片\我的爱人\1rmvb”或者“\我的爱人\1rmvb””[注意:前面有“\”这个字符]等等。这样也会导致在站点上无法观看这部**!因为最终成为“\\19216801\**\爱情片\\\19216801\**\爱情片\我的爱人\1rmvb”、“\\19216801\**\爱情片\**\爱情片\我的爱人\1rmvb”与“\\19216801\**\爱情片\\我的爱人\1rmvb”这些类似的错误地址!所以各位按照**服务器方式添加**时需要注意这些路径问题! 二、添加的**根本无法访问 其实这种错误也应属于是“地址错误”。但是有很多人总是说“我在其它网站看得好好的啊,怎么添加到我的站点时就不能看了?!”或者是“我在本地可以看的,但是添加到站点时就看不到了?!”。 对于第一种情况一般是直接“盗”用其它网站的**地址。要知道在网络上播放一部**是非常的消耗网络带宽和服务器资源的! 所以很多网站都会做出一下“防盗”措施,避免过多用户非法“盗链”!于是就出现了“在它的网站上看得好好的**而放到其它站点时就无法播放”的现象! 而第二种情况则一般你的**服务器(如果是在网吧服务器上的话)IP地址填写错误或者你的**没有被共享。 看**很卡,应该是你电脑的配置问题或者是网速问题


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存