web服务器

高性能web服务器的秘密核武器

廉价感情. 提交于 2020-04-28 21:46:09
最近kangle web服务器已经发布了新版2.3.1,其性能比老版本提升8倍之多,静态文件处理能力达apache的8-10倍。如此高的性能怎么来的 呢?kangle有哪些秘密武器呢?其实作为现代化的其它web服务器如nginx,lighttpd,cherokee等其原理都差不多,可能实现细节 有些区别而已。 第一件秘密武器:epoll/IOCP/kqueue新模型 传统的web服务器采用同步socket处理,即每一线程服务于一个客户(apache就是这样),或者是使用传统的select/poll模型。 在连接数小的情况,性能也不会很差,但随着连接数的上升,性能会直线下降,超过一定数量时,会导致服务器无法提供服务。这就是著名的C10K问题。现代化 的web服务器都采用效率更高的模型,linux下面是epoll,windows下面是IOCP,bsd系统的是kqueue. kangle新版也采用这种模型,连接数上升,性能只是会下降一点,基本上很稳定的提供服务。 第二件秘密武器: 非阻塞socket 即使采用了新模型也能更好的处理服务了,但为什么还要非阻塞socket呢?我们知道,对于发送数据(调用send),大多数的情况下是不会阻塞的,因为 数据是直接放到socket的缓冲里面,只有缓冲满了的情况下会阻塞。问题就是我们已经使用了新模型可以检测到该socket能发的时候才发啊?和阻塞有

在Tomcat中部署Web程序的几种方式

流过昼夜 提交于 2020-04-07 08:01:46
在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署。在下文中$CATALINA_HOME指的是Tomcat根目录。 一、静态部署 静态部署指的是我们在服务器启动之前部署我们的程序,只有当服务器启动之后,我们的Web应用程序才能访问。以下3中方式都可以部署: 1、将PetWeb目录拷贝到$CATALINA_HOME\webapps下,然后启动服务器就可以了。这种方式比较简单,但是web应用程序必须在webapps目录下。访问地址如下: http://localhost:8080/PetWeb/ 2、这种方式可以不必将PetWeb目录拷贝到webapps下,直接在F:\部署。方法如下,更改$CATALINA_HOME\conf\server.xml文件,在<host>标签内添加<Context>标签,内容如下: <Context docBase="F:/PetWeb" reloadable="false" path="/Pet"/> 其中reloadable="false"表示当应用程序中的内容发生更改之后服务器不会自动加载,这个属性在开发阶段通常都设为true,方便开发,在发布阶段应该设置为false,提高应用程序的访问速度。docBase为路径,可以使用绝对路径,也可以使用相对路径,相对路径相对于webapps。path属性的值是访问时的根地址。访问地址如下

在 Linux 服务器上配置 WEB 应用程序的日志打印到指定文件

一笑奈何 提交于 2020-04-06 19:47:30
服务器环境是 RedHat Linux, 其上运行的是 Apache + Tomcat,容器中运行的是我们公司的壹个小型电子商务网站,原来项目里的日志信息都是直接随着 Tomcat 容器壹起打印到 /tomcat/logs/catalina.out 中,与服务器本身的日志混合在壹起,特别难看,尤其当日志信息很多时,总是把重要的信息给冲掉了。感觉特别不爽。于是从两个月前开始,我就想把这个问题给解决下,思路就是给应用程序单独配置日志的输出方式,将其重定向到指定的日志文件,这样,我们可以简单的通过查看日志文件的方式来了解代码运行过程中可能存在的问题。 应用程序原来使用的是 LOG4J 来打印日志信息,查了下相关资料,最后我决定选用 Rolling File Appender,因为这种方式打印日志,当日志容量达到指定值时,如100MB,会自动重新生成壹个新的文件,并把原来的100MB 文件备份,这样,就可以将某一段时间内的日志信息都保留在服务器上,对于服务器维护很有帮助。 项目中的 log4j.properties 配置信息如下: log4j.rootLogger=DEBUG, ROLLING_FILE log4j.additivity.org.apache=true log4j.appender.ROLLING_FILE=org.apache.log4j

PHP-FPM是什么?

百般思念 提交于 2020-04-06 17:18:34
PHP-FPM 即 PHP FastCGI 进程管理器,要了解 PHP-FPM ,首先要看看 CGI 与 FastCGI 的关系。 CGI 的英文全名是 Common Gateway Interface,即通用网关接口,是 Web 服务器调用外部程序时所使用的一种服务端应用的规范。 早期的 Web 通信只是按照客户端请求将保存在 Web 服务器硬盘中的数据转发过去而已,这种情况下客户端每次获取的信息也是同样的内容(即静态请求,比如图片、样式文件、HTML文档),而随着 Web 的发展,Web 所能呈现的内容更加丰富,与用户的交互日益频繁,比如博客、论坛、电商网站、社交网络等。 这个时候仅仅通过静态资源已经无法满足 Web 通信的需求,所以引入 CGI 以便客户端请求能够触发 Web 服务器运行另一个外部程序,客户端所输入的数据也会传给这个外部程序,该程序运行结束后会将生成的 HTML 和其他数据通过 Web 服务器再返回给客户端(即动态请求,比如基于 PHP、Python、Java 实现的应用)。利用 CGI 可以针对用户请求动态返回给客户端各种各样动态变化的信息。 FastCGI 顾名思义,是 CGI 的升级版本,为了提升 CGI 的性能而生,CGI 针对每个 HTTP 请求都会 fork 一个新进程来进行处理(解析配置文件、初始化执行环境、处理请求)

数据库“长连接”与“短连接”

只愿长相守 提交于 2020-04-05 20:51:03
什么是长连接? 其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。 通常的短连接操作步骤是: 连接-》数据传输-》关闭连接 ; 而长连接通常就是: 连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接 ; 这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了 什么时候用长连接,短连接? 长连接主要用于在 少数 客户端与服务端的 频繁 通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。 但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。 总之,长连接和短连接的选择要视情况而定。 首先,如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。 在使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库

向网管们推荐一款好用的网管软件[Friendly Pinger]

时光毁灭记忆、已成空白 提交于 2020-04-04 15:23:23
为了提高网络管理效率,我们有必要及时为自己单位的局域网生成一个方便、直观的网络拓扑图,巧妙地使用这张网络拓扑图,我们能够快速地找到网络故障的源头。现在,笔者就以好用的网络管理工具——“Friendly Pinger”为例,向各位详细介绍一下如何快速为自己单位的局域网生成网络拓扑图,并且利用网络拓扑图帮助提高网络管理效率。 自己动手,绘制网络拓扑图 为了利用网络拓扑图高效管理本单位的局域网网络,我们首先需要对照局域网网络,通过Friendly Pinger工具将局域网的拓扑图绘制出来。在绘制网络拓扑图时,我们需要先从网上 下载 得到Friendly Pinger工具的安装程序,之后按照正确的方法将该程序安装到自己的工作站系统中;待该程序安装完毕后,用鼠标双击工作站系统桌面中的Friendly Pinger快捷图标,打开该程序的主操作界面。由于Friendly Pinger工具已经自带了拓扑图描绘程序,所以我们只要简单地利用该程序就能快速地将本单位局域网拓扑图描绘成功了: 首先在Friendly Pinger程序的主界面中(如下图所示)。 单击菜单栏中的“File”选项,从弹出的下拉菜单中执行“New”命令,一个新的网络拓扑图模板就出现在我们眼前了,下面我们只需要在这个空白的模板区域中添加上 网络设备 ,以及根据局域网的实际情况连接好相关 网络设备 就可以了。 Friendly

Web服务器(容器)请求常见的错误及其解决方法

夙愿已清 提交于 2020-04-04 05:05:29
首先我们来看看容器如何找到service()方法? (1)当在浏览器中输入 http://localhost:8080/firstweb/sayHi 这个地址后,容器是如何找到 HelloServlet.class这个文件并执行的呢? (2)首先容器会根据firstweb这个应用名找到位于webapps下面对应的文件夹, (3)然后根据地址中的“/sayHi”到web.xml文件中寻找与之匹配的<url-pattern>节点,找到匹配的节点后会找到与该节点紧邻的<servlet-name>节点,获取名称并在此寻找与该名称相等的<servlet-name>节点,找到相等的节点后,搜寻该节点下面紧邻的<servlet-class>节点,于是获取到了与该地址相对应的类名,借助于ClassLoader加载该类文件,创建对象并调用service()方法,客户端即看到了与该地址匹配的运行结果。 一、404错误产生原因及解决方法 在刚开始进行Web应用开发的时候,经常看见页面出现404这个数字,我们一般会称之为运行产生了404错误。类似于404这个数字,还有可能在页面上看到405、500这两个数字,他们都是服务器执行完客户端的请求以后,返回给客户端的一个关于执行结果的状态编码说明。 如果在运行结果页面中没有看到期待的页面,却看到了404、405、500这样的数字

搭建Mantis 缺陷管理系统

我的未来我决定 提交于 2020-04-03 04:09:17
什么是 Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written in the PHP scripting language and works with MySQL, MS SQL, and PostgreSQL databases and a webserver. MantisBT has been installed on Windows, Linux, Mac OS, OS/2, and others. Almost any web browser should be able to function as a client. It is released under the terms of the GNU General Public License (GPL). Mantis 是一个 BUG 管理系统。主要特点如下: 1、 用 php 写的系统,安装方便,不用像 bugzilla 那样安装那么多 perl 支持; 2、 系统相对简单轻磅,使用简单; 3、 出色的多语支持,对于对日开发等公司非常合适; 界面图示: 在线演示地址: http://www.futureware.biz/mantisdemo 环境搭建及 Mantis 安装、配置 由于

网络

删除回忆录丶 提交于 2020-04-01 13:09:13
OSI 的七层模型 应用层 :网络服务与最终用户的一个接口。HTTP、FTP、RPC 表示层: 数据的表示、安全、压缩。 会话层: 建立、管理、终止会话。 传输层: 定义传输数据的协议端口号,以及流控和差错校验。TCP、UDP 网络层: 进行逻辑地址寻址,实现不同网络之间的路径选择。IP 数据链路层: 建立逻辑连接、进行 硬件地址 寻址、差错校验等功能。MAC 物理层: 建立、维护、断开物理连接。bit流 TCP和UDP UDP在传输数据时不需要建立连接,远程的主机在接收到 UDP报文 之后不需要给出确认。 虽然提供的是不可靠交付,但是在某些情况下是一种有效的工作方式(一般用于即时通信),比如QQ语音,QQ音频,直播等等。UDP支持一对一,一对多,多对一和多对多的交互通信。 TCP在传输数据之前需要先建立连接,数据传输结束后需要释放连接。并且,不提供广播或者多播。由于TCP需要提供可靠的,面向连接的传输服务,所以会增加开销,如,确认、流量控制、计时器以及连接管理等。TCP一般用于文件的传输、发送和邮件的收发、远程登录等。 TCP特点: TCP通过检验 序列号,确认应答, 重发控制 ,连接管理以及窗口控制等机制实现可靠性传输。 通过序列号与确认应答提高可靠性(传输): TCP通过肯定的确认应答ACK实现可靠的 数据传输 。当发生端将数据发送出去之后会等待对端 的确认应答

设置C#Web网页Session超时丢失时间

我们两清 提交于 2020-03-30 20:45:24
C# Web网站 有时候在web.config设置sessionState 或者类文件里设置Session.Timeout,在IIS里访问时每次都是达不到时间就超时,原因是因为在IIS中设置了Session的超时时间,IIS里设置Session方法为: 1.IIS图形界面设置 IIS6 在IIS里面右键点击默认网站->主目录->应用程序设置里点配置->选项->启用会话状态->会话超时那里设置时间 IIS7.5 点击站点->功能视图->ASP->会话属性->超时 再web.config中设置Session过期时间方法: <system.web> <!--最大请求长度,单位为kb--> <compilation debug="true" targetFramework="4.6" /> <httpRuntime targetFramework="4.6" maxRequestLength="409600" /> <httpModules> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> </httpModules> <!--<sessionState mode=