中易网

程序在什么时候需要创建进程

答案:2  悬赏:80  
解决时间 2021-02-02 07:23
在刚开始学习windows程序设计时候,一些示例程序都没有在代码中创建进程;到了学习进程的时候犯迷糊了,就想:程序本来就可以运行,为什么还要在代码中创建进程,是不是多此一举?我知道我这个想法是错误的,但的确在以前的代码中没有用到,程序依然可以运行,这是什么原因?
最佳答案
程序只要启动了就拥有一个属于自己的进程,是的,一般情况下不必调用CreateProcess创建新进程。但是在要完成某些特殊任务的情况下就是要启动一个其他的程序,创建新进程。想想Windows的外壳explorer(就是Windows的操作界面,它自己本身是一个进程),当我们在使用Windows打开一个程序时,explorer就会调用CreateProcess启动该程序。
全部回答
服务器出现异常,网站不能正常访问。经排查�php的问题。 在重启php-fpm时,恢复正常。1分钟之后又出现故障。查看php日志文件/usr/local/php/var/log 后提示 warning: [pool www] server reached pm.max_children setting (5), consider raising it 子进程数已经达到设置的最大值。 要设置php进程数量。需要在php-fpm.conf文件中修改。 先看/usr/local/php/etc/php-fpm.conf文件各项配置解析 pid = run/php-fpm.pid #pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log #错误日志,默认在安装目录中的var/log/php-fpm.log log_level = notice #错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice. emergency_restart_threshold = 60 emergency_restart_interval = 60s #表示在emergency_restart_interval所设值内出现sigsegv或者sigbus错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。 process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0. daemonize = yes #后台执行fpm,默认值为yes,如果为了调试可以改为no。在fpm中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。 listen = 127.0.0.1:9000 #fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: ‘ip:port’, ‘port’, ‘/path/to/unix/socket’. 每个进程池都需要设置. listen.backlog = -1 #backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考: http://www.3gyou.cc/?p=41 listen.allowed_clients = 127.0.0.1 #允许访问fastcgi进程的ip,设置any为不限制ip,如果要设置其他主机的nginx也能访问这台fpm进程,listen处要设置成本地可被访问的ip。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接 listen.owner = www listen.group = www listen.mode = 0666 #unix socket设置选项,如果使用tcp方式访问,这里注释即可。 user = www group = www #启动进程的帐户和组 pm = dynamic #对于专用服务器,pm可以设置为static。 #如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定: pm.max_children #,子进程最大数 pm.start_servers #,启动时的进程数 pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程 pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ’0′ 则一直接受请求. 等同于 php_fcgi_max_requests 环境变量. 默认值: 0. pm.status_path = /status #fpm状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到 ping.path = /ping #fpm监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测fpm是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。 ping.response = pong #用于定义ping请求的返回相应. 返回为 http 200 的 text/plain 格式文本. 默认值: pong. request_terminate_timeout = 0 #设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ’0′ 表示 ‘off’.当经常出现502错误时可以尝试更改此选项。 request_slowlog_timeout = 10s #当一个请求该设置的超时时间后,就会将对应的php调用堆栈信息完整写入到慢日志中. 设置为 ’0′ 表示 ‘off’ slowlog = log/$pool.log.slow #慢请求的记录日志,配合request_slowlog_timeout使用 rlimit_files = 1024 #设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。 rlimit_core = 0 #设置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整数. 默认值: 系统定义值. chroot = #启动时的chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用. chdir = #设置启动目录,启动时会自动chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时) catch_workers_output = yes #重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据fastcgi的规则被重定向到 /dev/null . 默认值: 空. 根据以上配置的解析,在php-fpm.conf文件中添加如下配置: pm.max_children = 100 pm.start_servers = 30 pm.min_spare_servers = 20 pm.max_spare_servers = 100 以观后效。 另附豆瓣技术贴:https://www.douban.com/note/315222037/ 1、php-fpm优化参数介绍 他们分别是:pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。 pm:表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。 在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件的说明。 下面4个参数的意思分别为: pm.max_children:静态方式下开启的php-fpm进程数量 pm.start_servers:动态方式下的起始php-fpm进程数量 pm.min_spare_servers:动态方式下的最小php-fpm进程数 pm.max_spare_servers:动态方式下的最大php-fpm进程数量 区别: 如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。 如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。 系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程, 然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数 2、服务器具体配置 对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟apache一样,运行的php程序在执行完成后,或多或少会有内存泄露的问题。 这也是为什么开始的时候一个php-fpm进程只占用3m左右内存,运行一段时间后就会上升到20-30m的原因了。 对于内存大的服务器(比如8g以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。 因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30m 得到,比如8gb内存可以设置为100, 那么php-fpm耗费的内存就能控制在 2g-3g的样子。如果内存稍微小点,比如1g,那么指定静态的进程数量更加有利于服务器的稳定。 这样可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。 对于小内存的服务器来说,比如256m内存的vps,即使按照一个20m的内存量来算,10个php-cgi进程就将耗掉200m内存,那系统的崩溃就应该很正常了。 因此应该尽量地控制php-fpm进程的数量,大体明确其他应用占用的内存后,给它指定一个静态的小数量,会让系统更加平稳一些。或者使用动态方式, 因为动态方式会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或vps上使用。具体最大数量根据 内存/20m 得到。 比如说512m的vps,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比如服务器上只是部署php环境的话,比较合适的值在5~10之间。 本服务器配置 1、服务器基本信息: 硬盘:数据盘30g、系统盘20g 内存:1.5g cpu:双核 系统:centos 6.3 64位 带宽:独享2m 2、部署的应用 git、svn、apache、tomcat、php、nginx、mysql、jdk 3、优化后的参数 pm = dynamic pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
瑞派宠物医院(博威棠下院)在哪里啊,我有事要
软件工程会计信息化方向女生难学吗?就业好吗
潢川九龙春天农业科技有限公司怎么去啊,有知
修武县焦作中国邮政(周庄邮政支局)这个地址在
真的有不需要网络就能破wifi密码的软件吗
山东曰照市交警信息网查询车辆违章
一个男性朋友说要为我祈福,他什么意思?
马上中考了,孩子厌学了,我该怎么办????
老徐大排档(柯桥夜市店)在哪里啊,我有事要去
没有usB设备是什么意思?
什么牌子的香烟烟味与硬中华牌的烟味相似?
钢筋Z中H标识是什么钢材?
家美厨具地址在什么地方,想过去办事
石家庄哪里有卖新风系统的
我是09年.3入职,10年休了5天年假,我现在要
推荐资讯
侠盗猎车手4罪恶都市警车在哪
怎么更改诺基亚账户密码?
如图,BE平分∠ABD,DE平分∠BDC,且∠1+∠2=
中星9号小锅盖怎么升级
中超超市田园便利店在什么地方啊,我要过去处
120w的功放机带150一250w的音箱可以吗?
我被我朋友算计了我该怎么办。
锁屏再次运行游戏又重新开始了,请问怎么解决
形容 既然你不珍惜 我也觉得无所谓
今天是2016.8.21.282天前是几月几日
回头客汕头肠粉(朝阳店)这个地址在什么地方,
请问七彩菊花籽在哪能买到
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?