首页
关于
联系我
Search
1
小米路由器4A千兆版(R4A) 关闭ipv6 防火墙
33 阅读
2
小米路由器4A千兆版(R4A)开启ssh
28 阅读
3
win11不能访问共享0x800704f8
24 阅读
4
华硕主板vga亮白灯
15 阅读
5
racknerd配置IPV6
11 阅读
未分类
各种资料
我的分析
技术活
游记
真相
笔记
经历
财务知识
资源类
软文
统计学
计划本
事件记录
反思
登录
Search
标签搜索
问题
linux
vps
debian
测试
其他
apt-get
库
wordpress
cdn
code
设置
信息
IP
nginx
应用
推荐
搬家
操作
bae
Typecho
累计撰写
488
篇文章
累计收到
60
条评论
首页
栏目
未分类
各种资料
我的分析
技术活
游记
真相
笔记
经历
财务知识
资源类
软文
统计学
计划本
事件记录
反思
页面
关于
联系我
搜索到
488
篇与
的结果
2011-03-26
经济学
一游人到小镇一旅馆,拿1千元给店主挑了个房间他上楼时店主拿1千元给屠户支付了欠的肉钱。 屠夫去猪农那还了猪钱,猪农还了饲料款,饲料商去付清召妓的钱。 妓女赶紧去旅馆还了房钱。这1千元又到店主手里。 这时游客下楼说房间不合适,拿钱走了。 但全镇债务都还清了,人们快乐了! 这个很纠结,到底谁吃亏了? 貌似大家赚到钱了,但是有问题,好混乱啊。待会我思考下。
2011年03月26日
3 阅读
0 评论
0 点赞
2011-03-24
Java中@Override的作用
如果重写父类或接口的方法,在被重载的方法前面加上@Override,这样编译系统可以帮你检查方法的正确性.如:@Override public String getNamespace(){...}这是正确的如果将getNamespace写成getnamespace@Override public String getnamespace(){...}编译器可以检测出这种写法是错误的,提醒你改正.简单的说就是提醒编译器检查重载
2011年03月24日
3 阅读
0 评论
0 点赞
2011-03-24
hta 301
RewriteEngine on RewriteRule ^(.*)$ http://118.123.106.237:50001/
2011年03月24日
2 阅读
0 评论
0 点赞
2011-03-22
站点被黑
今天本站突然被黑,显示一串英文。检查后发现是模板文件被改,还好啊,没有删除我数据库。看来就是恶作剧。暂时恢复了。目前还不清楚是从哪里进来的。更改了密码。静观其变。
2011年03月22日
2 阅读
0 评论
0 点赞
2011-03-16
SSSWITCH
若喜欢节能的朋友想开启的,请打开终端模拟器。 首先 输入 ssscfg (感谢楼下同学的指正,疏忽了,惭愧) 第一步:按输入法键盘中的“回车”取得授权 第二步:输入“1”,按回车,启用SSSWITCH 第三步:输入“8”,按回车,保存当前设置并退出 第四步:按关机键”重启手机”,使SSSWITCH生效 先输入 ssscfg (感谢楼下的指正,疏忽了!!!惭愧)第一步:按输入法键盘中的“回车”取得授权 第二步:输入“3”,按回车,启用自定义设置 第三步:输入“5”,按回车,自定义内存与APP应用 第四步:输入“2”,按回车,启用内存管理模式2 等待1秒钟 第五步:输入“8”,按回车,保存当前设置并退出 第六步:按关机键,选择重启,使设置生效 我开机加载后,没杀内存,都有60+MB
2011年03月16日
1 阅读
0 评论
0 点赞
2011-03-12
ADB命令
ADB常用的几个命令1. 查看设备adb devices这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2. 安装软件 adb install <apk文件路径>这个命令将指定的apk文件安装到设备上3. 卸载软件 adb uninstall <软件名> adb uninstall -k <软件名>如果加 -k 参数,为卸载软件但是保留配置和缓存文件. 4. 登录设备shell adb shell adb shell <command命令>这个命令将登录设备的shell.后面加<command命令>将是直接运行设备命令, 相当于执行远程命令 5. 从电脑上发送文件到设备 adb push <本地路径> <远程路径>用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机) 6. 从设备上下载文件到电脑 adb pull <远程路径> <本地路径>用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑 7. 显示帮助信息 adb help这个命令将显示帮助信息删除Android系统Rom自带的软件 Android系统没有卸载Rom自带软件的功能.可能有些同学很想删除废了武功的Youtube,想删除墙那边的Twitter.加上Android的快捷方式没法修改没法自己排序没法分页.安装的程序太多就会发现原来找到自己想要的东西很难.综上所述,我觉得告知各位菜鸟同学如何删除自带的程序是很有必要的一件事情.1.确定手机root了,取得了root权限才能删除系统文件呀.2.下载Android_db.rar,解压到%windir/%System32下.3.手机连接数据线,在电脑上打开cmd,然后输入命令 adb remountadb shell
2011年03月12日
2 阅读
0 评论
0 点赞
2011-03-12
linux数字权限
通常用三个数字来表示文件的读取、写入、执行权限:执行:1写入:2读取:4
2011年03月12日
2 阅读
0 评论
0 点赞
2011-03-11
恼人的‘系统无法执行指定的程序’
搞了半天,也不知道究竟是哪里的问题,想来想去最可能的就是vc库没有安装,就是那个挺有名的vc2005库。估计也好自己用的精简系统有关啊。只要装上就没问题了。小疏忽往往制造大麻烦啊。顺便上传vc2005、vc2008的库。一般装vc2005就可以了。vc2005库vc2008
2011年03月11日
4 阅读
0 评论
0 点赞
2011-03-10
E:can't open CACHE:recovery/log
安卓刷机的时候,进入恢复模式的时候会出现这样的问题,如果你已经进不去了,那没啥办法,只能重刷了,重刷后,进入系统。用re 或者是终端删除/cache 目录下的所有内容就行了。经试验确实可以了。1. 进入模拟终端Terminal 2. 执行下列命令: su cd /cache pwd rm -rf * exit 3. 上面的命令在执行rm删除前,一定要用pwd确认目前已经是在/cache目录下了, 否则rm -rf * 。。。。你懂的; 4. 执行rm命令后, 系统会报 lost+found目录无法删除, 这个不用管, exit或者直接退出即可 5. reboot到recovery模式, enjoy it ! 网上的命令,自己用不是很好,建议还是用re 删除来的直接。
2011年03月10日
3 阅读
0 评论
0 点赞
2011-03-10
QQ单文件截图工具
qq的截图还是用着很爽的,有人把他提取出来了,单文件的。不用开qq就能用。下载地址
2011年03月10日
4 阅读
0 评论
0 点赞
2011-03-10
android sdk下载
android sdk的开发网站国内不能访问了,挺悲剧的,提供下window下的安装版:下载速度有点慢,大家忍忍吧。没有好的空间资源。http://yunfile.com/file/paopao00/7accc0bd/
2011年03月10日
1 阅读
0 评论
0 点赞
2011-03-10
java sdk安装配置
先说window下的:安装基本没什么了,和普通的程序安装差不多。配置稍稍麻烦点,我就奇怪了,迅雷都能自动配置,添加path。java却不行。右击我的电脑-属性-高级-环境变量-系统变量-新建 path /classpathpath = 你的jdk安装目录 classpath = 你的jdk安装目录/lib .不明白的就看下边的图吧,很简单的看图说话。linux的安装就很简单了,ubuntu用新力得就是自动配置的,完全不用管。
2011年03月10日
1 阅读
0 评论
0 点赞
2011-03-08
sdk platform tools component is missing
原来下载的andriod sdk 不是完整版本的,还需要运行/tool/andriod 安装下才可以。linux 版本是这样,windows版没有安装不是很清楚。----------------------------------------------------2010.3.10---------------------经验证window下下载的andriod sdk 安装版也是不完整的,需要自己下载。方法同linux
2011年03月08日
2 阅读
0 评论
0 点赞
2011-03-01
含叶酸较多的食物
◇猪肝:含425.1微克◇黄豆:含181.1微克◇奶白菜:含116.8微克◇豌豆苗:含99.5微克◇油菜:含103.9微克◇鸡腿菇(干)含351.8微克◇榴莲:含116.9微克◇鸡蛋(红皮):含70.7微克
2011年03月01日
2 阅读
0 评论
0 点赞
2011-02-28
php curl 资料
对于CURL库的参数详解,网上有很多我直接收录了 函数列表CURL库一共有17个函数: curl_close:关闭CURL会话 curl_copy_handle:复制一个CURL会话句柄,同时3复制其所有参数 curl_errno:返回最后一个错误码 curl_error:返回一个字符串,用以描述当前会话的最后一个错误 curl_exec:执行当前会话 curl_getinfo:获取特定信息 curl_init:初始化CURL会话 curl_multi_add_handle:在一个多连接会话中添加一个句柄 curl_multi_close:关闭一个多句柄CRUL会话 curl_multi_exec:执行一个多句柄CURL会话 curl_multi_getcontent:返回一个句柄执行后的内容,如果设置了CURLOPT_RETURNTRANSFER curl_multi_info_read:获取当前所有连接的信息 curl_multi_init:初始化一个多句柄会话 curl_multi_remove_handle:从一个多句柄会话中删除一个句柄 curl_multi_select:获取所有绑定的套接字 curl_setopt:设置CURL传输选项 curl_version:获取CURL版本 常用设置选项布尔值选项 CURLOPT_AUTOREFERER:当返回的信息头含有转向信息时,自动设置前向连接 CURLOPT_BINARYTRANSFER:TRUEtoreturntherawoutputwhenCURLOPT_RETURNTRANSFERisused. CURLOPT_COOKIESESSION:标志为新的cookie会话,忽略之前设置的cookie会话 CURLOPT_CRLF:将Unix系统的换行符转换为Dos换行符 CURLOPT_DNS_USE_GLOBAL_CACHE:使用全局的DNS缓存 CURLOPT_FAILONERROR:忽略返回错误 CURLOPT_FILETIME:获取请求文档的修改日期,该日期可以用curl_getinfo()获取。 CURLOPT_FOLLOWLOCATION:紧随服务器返回的所有重定向信息 CURLOPT_FORBID_REUSE:当进程处理完毕后强制关闭会话,不再缓存供重用 CURLOPT_FRESH_CONNECT:强制建立一个新的会话,而不是重用缓存的会话 CURLOPT_HEADER:在返回的输出中包含响应头信息 CURLOPT_HTTPGET:设置HTTP请求方式为GET CURLOPT_HTTPPROXYTUNNEL:经由一个HTTP代理建立连接 CURLOPT_NOBODY:返回的输出中不包含文档信息. CURLOPT_NOPROGRESS:禁止进程级别传输,PHP自动设为真 CURLOPT_NOSIGNAL:忽略所有发往PHP的信息 CURLOPT_POST:设置POST方式提交数据,POST格式为application/x-www-form-urlencoded CURLOPT_PUTTRUE:设置PUT方式上传文件,同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE CURLOPT_RETURNTRANSFER:返回字符串,而不是调用curl_exec()后直接输出 CURLOPT_SSL_VERIFYPEER:SSL验证开启 CURLOPT_UNRESTRICTED_AUTH:一直链接后面附加用户名和密码,同时设置CURLOPT_FOLLOWLOCATION CURLOPT_UPLOAD:准备上传整数值选项 CURLOPT_BUFFERSIZE:缓存大小 CURLOPT_CONNECTTIMEOUT:连接时间设置,默认0为无限制 CURLOPT_DNS_CACHE_TIMEOUT:内存中保存DNS信息的时间,默认2分钟 CURLOPT_INFILESIZE:上传至远程站点的文件尺寸 CURLOPT_LOW_SPEED_LIMIT:传输最低速度限制andabort. CURLOPT_LOW_SPEED_TIME:传输时间限制 CURLOPT_MAXCONNECTS:最大持久连接数 CURLOPT_MAXREDIRS:最大转向数 CURLOPT_PORT:连接端口 CURLOPT_PROXYAUTH:*****验证方式 CURLOPT_PROXYPORT:*****端口 CURLOPT_PROXYTYPE:*****类型 CURLOPT_TIMEOUT:CURL函数的最大执行时间字符串选项 CURLOPT_COOKIE:HTTP头中set-cookie中的cookie信息 CURLOPT_COOKIEFILE:包含cookie信息的文件,cookie文件的格式可以是Netscape格式,或者只是HTTP头的格式 CURLOPT_COOKIEJAR:连接结束后保存cookie信息的文件 CURLOPT_CUSTOMREQUEST:自定义请求头,使用相对地址 CURLOPT_ENCODING:HTTP请求头中Accept-Encoding的值 CURLOPT_POSTFIELDS:POST格式提交的数据内容 CURLOPT_PROXY:代理通道 CURLOPT_PROXYUSERPWD:代理认证用户名和密码 CURLOPT_RANGE:返回数据的范围,以字节记 CURLOPT_REFERER:前向链接 CURLOPT_URL:要连接的URL地址,可以在curl_init()中设置 CURLOPT_USERAGENT:HTTP头中User-Agent的值 CURLOPT_USERPWD:连接种使用的验证信息数组选项 CURLOPT_HTTP200ALIASES:200响应码数组,数组中的响应吗被认为是正确的响应 CURLOPT_HTTPHEADER:自定义请求头信息只能是流句柄的选项: CURLOPT_FILE:传输要写入的晚间句柄,默认是标准输出 CURLOPT_INFILE:传输要读取的文件句柄 CURLOPT_STDERR:作为标准错误输出的一个替换选项 CURLOPT_WRITEHEADER:传输头信息要写入的文件回调函数选项 CURLOPT_HEADERFUNCTION:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息按行返回。设置返回值为字符串长度。 CURLOPT_READFUNCTION:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此函数,将自行处理返回的数据。返回值为数据尺寸。 CURLOPT_WRITEFUNCTION:拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息是整个字符串。设置返回值为字符串长度。
2011年02月28日
5 阅读
0 评论
0 点赞
2011-02-23
mysql读取乱码解决
SET NAMES 'UTF8'
2011年02月23日
2 阅读
0 评论
0 点赞
2011-01-28
ulimit 是什么
简单的说就是限制线程或者是资源数。看ibm上的解释吧,很详细。http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响。 回页首 ulimit 的功能和用法 ulimit 功能简述 假设有这样一种情况,当一台 Linux 主机上同时登陆了10个人,在系统资源无限制的情况下,这10个用户同时打开了500个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。 而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联系。这时,ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。 ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。 作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。 图1. ulimit 的使用 在下面的章节中,将详细介绍如何使用 ulimit 做相应的资源限制。 如何使用 ulimit ulimit 通过一些参数选项来管理不同种类的系统资源。在本节,我们将讲解这些参数的使用。 ulimit 命令的格式为:ulimit [options] [limit] 具体的 options 含义以及简单示例可以参考以下表格。 表1. ulimit 参数说明 选项 [options] 含义 例子 -H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs64;限制硬资源,线程栈大小为 64K。 -S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn32;限制软资源,32个文件描述符。 -a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。 -c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。 -d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。 -f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f2048;限制进程可以创建的最大文件大小为2048blocks。 -l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l32;限制最大可加锁内存大小为32Kbytes。 -m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。 -n 可以打开最大文件描述符的数量。 ulimit – n128;限制最大可以使用128个文件描述符。 -p 管道缓冲区的大小,以 Kbytes 为单位。 ulimit – p512;限制管道缓冲区的大小为512Kbytes。 -s 线程栈大小,以 Kbytes 为单位。 ulimit – s512;限制线程栈的大小为512Kbytes。 -t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。 -u 用户最大可用的进程数。 ulimit – u64;限制用户最多可以使用64个进程。 -v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v200000;限制最大可用的虚拟内存为200000Kbytes。 我们可以通过以下几种方式来使用 ulimit: 在用户的启动脚本中 如果用户使用的是 bash,就可以在用户的目录下的 .bashrc 文件中,加入 ulimit – u64,来限制用户最多可以使用64个进程。此外,可以在与 .bashrc 功能相当的启动脚本中加入 ulimt。 在应用程序的启动脚本中 如果用户要对某个应用程序 myapp 进行限制,可以写一个简单的脚本 startmyapp。 ulimit – s512 myapp 以后只要通过脚本 startmyapp 来启动应用程序,就可以限制应用程序 myapp 的线程栈大小为 512K。 直接在控制台输入 user@tc511-ui:~>ulimit – p256 限制管道的缓冲区为 256K。 回页首 用户进程的有效范围 ulimit 作为对资源使用限制的一种工作,是有其作用范围的。那么,它限制的对象是单个用户,单个进程,还是整个系统呢?事实上,ulimit 限制的是当前 shell 进程以及其派生的子进程。举例来说,如果用户同时运行了两个 shell 终端进程,只在其中一个环境中执行了 ulimit – s100,则该 shell 进程里创建文件的大小收到相应的限制,而同时另一个 shell 终端包括其上运行的子程序都不会受其影响: Shell 进程1 ulimit – s100 cat testFile > newFile File size limit exceeded Shell 进程2 cat testFile > newFile ls – s newFile 323669newFile 那么,是否有针对某个具体用户的资源加以限制的方法呢?答案是有的,方法是通过修改系统的 /etc/security/limits 配置文件。该文件不仅能限制指定用户的资源使用,还能限制指定组的资源使用。该文件的每一行都是对限定的一个描述,格式如下: <domain> <type> <item> <value> domain 表示用户或者组的名字,还可以使用 * 作为通配符。Type 可以有两个值,soft 和 hard。Item 则表示需要限定的资源,可以有很多候选值,如 stack,cpu,nofile 等等,分别表示最大的堆栈大小,占用的 cpu 时间,以及打开的文件数。通过添加对应的一行描述,则可以产生相应的限制。例如: * hard noflle100 该行配置语句限定了任意用户所能创建的最大文件数是100。 现在已经可以对进程和用户分别做资源限制了,看似已经足够了,其实不然。很多应用需要对整个系统的资源使用做一个总的限制,这时候我们需要修改 /proc 下的配置文件。/proc 目录下包含了很多系统当前状态的参数,例如 /proc/sys/kernel/pid_max,/proc/sys/net/ipv4/ip_local_port_range 等等,从文件的名字大致可以猜出所限制的资源种类。由于该目录下涉及的文件众多,在此不一一介绍。有兴趣的读者可打开其中的相关文件查阅说明。 回页首 ulimit 管理系统资源的例子 ulimit 提供了在 shell 进程中限制系统资源的功能。本章列举了一些使用 ulimit 对用户进程进行限制的例子,详述了这些限制行为以及对应的影响,以此来说明 ulimit 如何对系统资源进行限制,从而达到调节系统性能的功能。 使用 ulimit 限制 shell 的内存使用 在这一小节里向读者展示如何使用 – d,– m 和 – v 选项来对 shell 所使用的内存进行限制。 首先我们来看一下不设置 ulimit 限制时调用 ls 命令的情况: 图2. 未设置 ulimit 时 ls 命令使用情况 大家可以看到此时的 ls 命令运行正常。下面设置 ulimit: >ulimit -d1000-m1000-v1000 这里再温习一下前面章节里介绍过的这三个选项的含义: -d:设置数据段的最大值。单位:KB。 -m:设置可以使用的常驻内存的最大值。单位:KB。 -v:设置虚拟内存的最大值。单位:KB。 通过上面的 ulimit 设置我们已经把当前 shell 所能使用的最大内存限制在 1000KB 以下。接下来我们看看这时运行 ls 命令会得到什么样的结果: haohe@sles10-hehao:~/code/ulimit> ls test -l /bin/ls: errorwhileloading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory 从上面的结果可以看到,此时 ls 运行失败。根据系统给出的错误信息我们可以看出是由于调用 libc 库时内存分配失败而导致的 ls 出错。那么我们来看一下这个 libc 库文件到底有多大: 图3. 查看 libc 文件大小 从上面的信息可以看出,这个 libc 库文件的大小是1.5MB。而我们用 ulimit 所设置的内存使用上限是 1000KB,小于1.5MB,这也就充分证明了 ulimit 所起到的限制 shell 内存使用的功能。 使用 ulimit 限制 shell 创建的文件的大小 接下来向读者展示如何使用 -f 选项来对 shell 所能创建的文件大小进行限制。 首先我们来看一下,没有设置 ulimit -f 时的情况: 图4. 查看文件 现有一个文件 testFile 大小为323669bytes,现在使用 cat 命令来创建一个 testFile 的 copy: 图5. 未设置 ulimit 时创建复本 从上面的输出可以看出,我们成功的创建了 testFile 的拷贝 newFile。 下面我们设置 ulimt – f100: > ulimit -f100 -f 选项的含义是:用来设置 shell 可以创建的文件的最大值。单位是 blocks。 现在我们再来执行一次相同的拷贝命令看看会是什么结果: 图6. 设置 ulimit 时创建复本 这次创建 testFile 的拷贝失败了,系统给出的出错信息时文件大小超出了限制。在 Linux 系统下一个 block 的默认大小是512bytes。所以上面的 ulimit 的含义就是限制 shell 所能创建的文件最大值为512x100=51200bytes,小于323669bytes,所以创建文件失败,符合我们的期望。这个例子说明了如何使用 ulimit 来控制 shell 所能创建的最大文件。 使用 ulimit 限制程序所能创建的 socket 数量 考虑一个现实中的实际需求。对于一个 C/S 模型中的 server 程序来说,它会为多个 client 程序请求创建多个 socket 端口给与响应。如果恰好有大量的 client 同时向 server 发出请求,那么此时 server 就会需要创建大量的 socket 连接。但在一个系统当中,往往需要限制单个 server 程序所能使用的最大 socket 数,以供其他的 server 程序所使用。那么我们如何来做到这一点呢?答案是我们可以通过 ulimit 来实现!细心的读者可能会发现,通过前面章节的介绍似乎没有限制 socket 使用的 ulimit 选项。是的,ulimit 并没有哪个选项直接说是用来限制 socket 的数量的。但是,我们有 -n 这个选项,它是用于限制一个进程所能打开的文件描述符的最大值。在 Linux 下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。在 Linux 下创建一个新的 socket 连接,实际上就是创建一个新的文件描述符。如下图所示(查看某个进程当前打开的文件描述符信息): 图7. 查看进程打开文件描述符 因此,我们可以通过使用 ulimit – n 来限制程序所能打开的最大文件描述符数量,从而达到限制 socket 创建的数量。 使用 ulimit 限制 shell 多线程程序堆栈的大小(增加可用线程数量) 在最后一个例子中,向大家介绍如何使用 -s(单位 KB)来对线程的堆栈大小进行限制,从而减少整个多线程程序的内存使用,增加可用线程的数量。这个例子取自于一个真实的案例。我们所遇到的问题是系统对我们的多线程程序有如下的限制: ulimit -v200000 根据本文前面的介绍,这意味着我们的程序最多只能使用不到 200MB 的虚拟内存。由于我们的程序是一个多线程程序,程序在运行时会根据需要创建新的线程,这势必会增加总的内存需求量。一开始我们对堆栈大小的限制是1024(本例子中使用1232来说明): # ulimit – s1232 当我们的程序启动后,通过 pmap 来查看其内存使用情况,可以看到多个占用 1232KB 的数据段,这些就是程序所创建的线程所使用的堆栈: 图8. 程序线程所使用的堆栈 每当一个新的线程被创建时都需要新分配一段大小为 1232KB 的内存空间,而我们总的虚拟内存限制是 200MB,所以如果我们需要创建更多的线程,那么一个可以改进的方法就是减少每个线程的固定堆栈大小,这可以通过 ulimit – s 来实现: # ulimit -s512 我们将堆栈大小设置为 512KB,这时再通过 pmap 查看一下我们的设置是否起作用: 图9. 设置 ulimit 后堆栈大小 从上面的信息可以看出,我们已经成功的将线程的堆栈大小改为 512KB 了,这样在总内存使用限制不变的情况下,我们可以通过本小节介绍的方法来增加可以创建的线程数,从而达到改善程序的多线程性能。 回页首 总结 综上所述,linux 系统中的 ulimit 指令,对资源限制和系统性能优化提供了一条便捷的途径。从用户的 shell 启动脚本,应用程序启动脚本,以及直接在控制台,都可以通过该指令限制系统资源的使用,包括所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存,等等方面。本文中的示例非常直观的说明了 ulimit 的使用及其产生的效果,显而易见,ulimit 对我们在 Linux 平台的应用和开发工作是非常实用的。 回页首 特别感谢 贺皓为本篇文章的撰写提出了很多建议,做了大量实验,提供了文章中的实验数据和结论。 贺皓是 IBM CSTL(中国系统与科技开发中心)的软件工程师。他在复旦大学获得了计算机科学专业的学士与硕士学位。目前他在 IBM SVC Agent 开发小组从事研发工作。 参考资料 参考 Linux Man Pages获取 ulimit 信息。 在 developerWorks Linux 专区寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。 在 developerWorks 上查阅所有 Linux 技巧和 Linux 教程。
2011年01月28日
2 阅读
0 评论
0 点赞
2011-01-28
pdo_dbh.c:410: error: ‘zval’ has no member named ‘refcount’
环境:php5.35解决方法很简单:不要编译PDO模块了,php5.35已经包含了。
2011年01月28日
2 阅读
0 评论
0 点赞
2011-01-27
发个三星安卓驱动做备份
顺便测试yunfile这个驱动的好处呢,是比较的小,安装的时候选择安装就可以了。如果你只是想向手机内拷贝文件的话,只需要关闭usb调试就可以的。这个方法适用于所有安卓手机的。下载地址:三星安卓驱动.rar
2011年01月27日
0 阅读
0 评论
0 点赞
2011-01-27
xp自动登录
在运行里输入: rundll32 netplwiz.dll,UsersRunDll 取消对“要使用本机,用户必须输入用户名和密码”项的选择,点击“应用”。在接下来弹出的对话框中输入你想让电脑每次自动登录的用户名及其密码,下次启动时就可以实现XP的自动登录了。学习了。
2011年01月27日
2 阅读
0 评论
0 点赞
1
...
23
24
25