1、定时执行

就crontab了,linux命令,具体怎么用,自己google。只想说一点,crontab的时候需要注意权限,运维经常会用root来启动,导致有些文件web用户无权限。

2、后台守护

分两步:1需要在脚本中写死循环,因为php不像python,我一般是 do {....} while (true); 不过循环体里面一般要加个sleep的,不然机器会被跑死;2启动进程的时候需要在后面加个“&” ,这个大家也google吧,如果需要记录输出的信息需要这样写 php xxxx.php > /tmp/phplog &,这样程序的信息就记录到文件里了,方便以后排除问题。

3、运行监控

后台守护的进程启动了,但是你无法100%肯定你的程序不会出现警告信息,一旦出现这些信息,php会终止掉当前的进程,这个时候后台的程序就直接退出了

。所以除了正常处理事情的程序外,还需要一个检查那个程序运行状态的程序,我一般会叫xxxxDefend.php,这个程序示例如下

#!/usr/local/php5/bin/php<?php

//启动的命令$action = '/usr/local/php5/bin/php xxxxxx.php';$logPath = '/tmp/logs/';

do { $result = array(); exec("ps aux | grep 'xxxxxx.php'", $result);

$isOk = 0; foreach ($result as $v) {  $is = strpos($v, $action);  if (false !== $is) {   $isOk++;  } }

$exec = $action . " > " . $logPath . "xxxxxx_log &"; for ($i=1;$i<=(5-$isOk);$i++) {  exec($exec); } sleep(5);} while (true);

把这个程序也在后台启动起来,它就会每隔5秒用ps命令检查下工作的程序是否存在,不在或者不足5个的时候,就启动到5个。当然这个工作也可以交给运维用shell来做,不过当运维能力不足的时候就得自己来了。

4、多进程

工作的php为了增加效率,一般情况下会同时启动多个,甚至是运行在多台机器上。这个时候就要考虑到多进程同时处理同一个数据的问题。这个时候一般我会吧任务做一个队列(一般用redis,这个性能蛮不错的,怎么做,大家还是google吧),然后工作程序每次pop出一条要工作的记录,比如你有一个很大的文件要处理,这个时候我一般把文件处理好,一条一条的放到redis的list里,这样工作的程序就可以多个程序一起pop,并行执行,而且不会重复。如果实在没有redis,可以用mysql做,建个innodb的表,程序处理的之前务必在要处理的数据上加个读锁,然后处理之后加标记,或者直接删掉那条数据,这样也可以实现多进程不重复的问题。

5、日志

后台的程序一般会一直跑的,基本上不出事没人会理它,所以日志异常重要,因为一旦出事了,需要靠日志来找原因的,不像前台的程序可以echo看看错在哪里。日志不要怕记的多,不要怕浪费空间,硬盘不值钱的,但是一个bug可能会直接影响你的收入。我一般这样记日志

[机器ip] [进程pid] [时间] [当前程序文件名] [文件行数] [必要的参数和信息] [其他]

这些是正常的程序中能想到的问题,一般还会在程序的最外层加个try catch,这样能够捕获大部分的异常,然后也记录下来(警告catch不到,挺郁闷的)

6、性能优化

像这种后台的程序,一般运维都会单独给机器,这个时候需要做下压力测试,看看机器究竟能跑几个进程,这个一般在处理程序狂处理任务的时候看看机器的cpu,内存,网络,以及硬盘的使用情况,最好是这些同时达到最大值,这样你的这台机器就不浪费了,如果硬盘使用率很高,其他的很低,就要优化程序,这个情况一般是吧读取和写入的数据在内存中暂存一段时间,然后一次性写入硬盘;如果cpu狂高,那就是你的算法太搓了,优化优化吧;内存和网络一般不会成为瓶颈,php用不了多少内存,服务器至少也得是个千兆的网卡吧,这两项一般不会是瓶颈。所以这些机器我一般会再开个memcache,哈哈,不浪费。

7、题外话

一个关于服务器close_wait的问题。php的程序员一般都不太严谨,很少有人开了链接之后会主动关闭连接的,比如连数据库,连memcache,很多程序员都是建链接,操作,然后程序执行完成。如果php不主动关闭连接,会导致对方的机器一直会等待这边的关闭操作,在对方服务器上看到的就是一个close_wait状态,而一台机器能开的链接也就那么6万多个,尤其是后台的程序跑起来之后,对方的机器很快就被占满了,然后连不上。这个时候2边都需要做些修改,一方面php要主动断开连接,另一方面对方的机器,需要吧close_wait的默认超时时间改短一点(怎么改?自己google去),我一般memcache的只有5秒,数据库的长点,也就2分钟。这样处理之后,服务器的持续性就大大增加了,并发能力也会提高。

php聊天程序后端,php写后端运作程序总结相关推荐

  1. python表白程序-python如何写出表白程序

    用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下: from tkinter import * from tkinter im ...

  2. python编写表白程序_python如何写出表白程序

    用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下: from tkinter import * from tkinter im ...

  3. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  4. 一个程序员,写在告别程序员生涯时说的话

    点击上方"码农突围",马上关注,每天早上8:50准时推送 真爱,请置顶或星标 本文转载自https://bbs.csdn.net/topics/360126108,作者:cllov ...

  5. [我的1024开源程序]350元写的HTML5程序

    开源地址 https://gitee.com/yunju_ustc/html5.git 程序介绍

  6. ar unity 小程序_unity可以写微信小程序吗?

    微信小游戏现在非常的火,很多开发Unity的同学, 都想自己开发微信小游戏,无奈tiny还不成熟,导致很多同学有自己创业做微信小游戏的想法,但是由于技术,却放弃了这样的机会,今天我给大家讲述unity ...

  7. python手写字体程序_深度学习---手写字体识别程序分析(python)

    我想大部分程序员的第一个程序应该都是"hello world",在深度学习领域,这个"hello world"程序就是手写字体识别程序. 这次我们详细的分析下手 ...

  8. 怎么让程序后台运行_CPU中的程序是怎么运行起来的?

    1CPU的硬件最小原子 计算机从上世纪四十年代发展到现在有八十多年了,我们现在开发应用以及很少会涉及到底层的部分,硬件设计的电子专业在学校里面会学习模电数电这两门课,今天的第一部分就从这里说起. 一般 ...

  9. 【小程序websocket前后端交互】uniapp写微信小程序聊天功能功能,websocket交互功能,心跳重连【详细注释,复制即用】

    前言 这几天在做的一个需求,就是要写一个小程序端的页面,用于跟客服聊天. 然后就用到了websocket技术,以前我做过网页版的,但是做小程序后发现网页版的逻辑放过来没问题,但是很多的方法和api是不 ...

最新文章

  1. 网站推广专员浅析网站推广中网站优化的价值取向究竟为何?
  2. 第一次ScrumMeeting博客:团队任务分解
  3. SAP UI5 Extension getCustomProperties
  4. 利用自定义的 ClassLoader 加密 Java Class 文件
  5. 【原创】使用yahoo雅虎js库(YUI)建立无刷新的N级树(可添加删除节点)
  6. the catalina_home environment variable
  7. MySQL 左右两表比较问题
  8. php中声明空数组,总结PHP中初始化空数组的最佳方法
  9. MFC字符串CString分割函数 简洁 C++
  10. request.setAttribute()怎么用的?
  11. Ajax异步刷新,测试用户名是否被注册
  12. c++编程求解二元二次方程组_二元一次方程组及其解法
  13. 会议记录管理系统java_项目文档--会议记录标准与模板
  14. Python实战项目(一)刷网页访问量程序
  15. SwiftUI Core ML 基础教程
  16. 从一个广告读懂华为云
  17. Unable to find instance for XXXX
  18. 4核处理器_苹果电脑便宜卖!4核i5处理器,480G固态硬盘,带刻录,13.4寸,双系统...
  19. 计算机如何获取知识和技能 实现自我完善,在人工智能中有一个研究领域,主要研究计算机如何获取知识和技能,实现自我完善,这门分支学科叫做。...
  20. 求n的阶乘并显示过程

热门文章

  1. NC:遗传发育所Speakman组-棕色脂肪是无菌小鼠改善血糖的关键
  2. Nature综述: 地球上细菌和古菌的生物被膜丰度
  3. pandas使用duplicated函数删除dataframe中重复列名称的数据列、默认保留重复数据列中的第一个数据列(removing duplicate columns in dataframe)
  4. R语言可视化、编写自定义函数可视化水平排序条形图(horizontal bar plot)、自定义图像布局模仿经济学人杂志可视化效果、右侧添加标签数值图像方框、自定义背景色、水平条形图中间线条等
  5. R语言基于线性回归(Linear Regression)进行特征筛选(feature selection)
  6. android 手机 吉字节,Java 数据类型05Android开发小典
  7. Python自用工具包PyTls
  8. 汇编语言课本习题 p112 3.30
  9. linux删除网卡bond,linux下网卡bond的基本配置及错误
  10. 有方向的CNN--Oriented Response Networks