首页 > 编程知识 正文

微软提升php在iis下的性能(iis如何支持php)

时间:2023-12-18 19:07:39 阅读:317274 作者:QMVY

本文目录一览:

php服务器用IIS好还是用Apache好,其他的服务器怎么样

看你的项目,apache肯定好于iis的,但是apache和nginx之间也是有区别的。

轻量级,同样起web 服务,比apache 占用更少的内存及资源 ,抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 ,高度模块化的设计,编写模块相对简单,社区活跃,各种高性能模块出品迅速啊

apache 相对于nginx 的优点:

rewrite ,比nginx 的rewrite 强大,模块超多,基本想到的都可以找到,少bug ,nginx 的bug 相对较多,超稳定,存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。

---------------------

iis 运行php效率怎么样

效率高不高取决于你写的php程序。iis绝对很好的,微软的技术肯定很高的。iis是win下的不二选择。可以下载phpstudy 切换iis+php。能很好得支持iis7,iis8和iis6。

php+MsSQL+IIS服务器运行缓慢

1 嗯 用apache+linux+php来跑是业界流行的

2 优化服务端的程序提高效率是有限的 iis同样的优化达到一个性能所花费的代价远远高于apache 难度也很高 不是说难度是因为iis所有功能都是封装死的

3 建议不要用 iis iis是用来跑asp的不是跑php的 个人感觉微软的iis总是死机 稳定性不可靠

4 小型机更要用pache+linux+php

怎样提高IIS服务器性能,加快服务器速度

1、应该分配和释放多个对象

你应该尽量避免过量分配内存,因为内存分配可能是代价高昂的。释放内存块可能更昂贵,因为大多数分配算符总是企图连接临近的已释放的内存块成为更大的块。直到Windows NT? 4.0 service pack 4.0,在多线程处理中,系统堆通常都运行得很糟。堆被一个全局锁保护,并且在多处理器系统上是不可扩展的。

2.不应该考虑使用处理器高速缓存

大多数人都知道由虚拟内存子系统导致的hard 页错误代价很高,最好避免。但是许多人认为其他内存访问方法没有什么区别。自从80486以后,这一观点就不对了。现代的CPUs比RAM要快得多,RAM至少需要两级内存缓存 ,高速L1 缓存能保存8KB数据和8KB指令,而较慢的L2 缓存能保存几百KB的数据和代码,这些数据和代码混合在一起。L1 缓存中内存区域的一个引用需要一个时钟周期,L2 缓存的引用需要4到7个时钟周期,而主内存的引用需要许多个处理器时钟周期。后一数字不久将会超过100个时钟周期。在许多方面,缓存像一个小型的,高速的,虚拟内存系统。

至于和缓存有关的基本内存单元不是字节而是缓存列。Pentium 缓存列有32个字节宽。Alpha 缓存列有64个字节宽。这意味着在L1 缓存中只有512个slot给代码和数据。如果多个数据一起使用(时间位置)而并不存储在一起(空间位置),性能会很差。数组的空间位置很好,而相互连接的列表和其他基于指针的数据结构的位置往往很差。

把数据打包到同一个缓存列中通常会有利于提高性能,但是它也会破坏多处理器系统的性能。内存子系统很难协调处理器间的缓存。如果一个被所有处理器使用的只读数据,和一个由一个处理器使用并频繁更新的数据共享一个缓存 列,那么缓存将会花费很长时间更新这个缓存列的拷贝。这个Ping-Pong高速游戏通常被称为"缓存 sloshing"。如果只读数据在一个不同的缓存 列中,就可以避免sloshing。

对代码进行空间优化比进行速度优化效率更高。代码越少,代码所占的页也越少,这样需要的运行设置和产生的页错误也会更少,同时占据的缓存 列也会更少。然而,某些核心函数应该进行速度优化。可以利用profiler去识别这些函数。

3.决不要缓存频繁使用的数据。

软件缓存可以被各种应用程序使用。当一个计算代价很高时,你会保存结果的一个拷贝。这是一个典型的时空折中方法:牺牲一些存储空间以节省时间。如果做得好,这种方法可能非常有效。

你必须正确地进行缓存。如果缓存了错误数据,就会浪费存储空间。如果缓存得太多,其他操作可以使用的内存将会很少。如果缓存得太少,效率又会很低,因为你必须重新计算被缓存 遗漏的数据。如果将时间敏感数据缓存得时间过长,这些数据将会过时。一般,服务器更关心的是速度而不是空间,所以他们要比桌面系统进行更多的缓存。一定要定期去除不用的缓存,否则将会有运行设置问题。

4.应该创建多个线程,越多越好。

调整服务器中起作用的线程数目是很重要的。如果线程是I/O-bound的,将会花费很多时间用来等待I/O的完成-一个被阻塞的线程就是一个不做任何有用工作的线程。加入额外的线程可以增加通量,但是加入过多的线程将会降低服务器的性能,因为上下文交换将会成为一个重大的overhead。上下文交换速度应该低的原因有三个:上下文交换是单纯的overhead,对应用程序的工作没有任何益处;上下文交换用尽了宝贵的时钟周期;最糟的是,上下文交换将处理器的缓存填满了没用的数据,替换这些数据是代价高昂的。

有很多事情是依靠你的线程化结构的。每个客户端一个线程是绝对不合适的。因为对于大量用户端,它的扩展性不好。上下文交换变得难以忍受,Windows NT用尽了资源。线程池模型会工作得更好,在这种方法中一个工人线程池将处理一条请求列,因为Windows 2000提供了相应的APIs,如QueueUserWorkItem。

5.应该对数据结构使用全局锁

使数据线程安全的最简单方法是把它套上一把大锁。为简单起见,所有的东西都用同一把锁。这种方法会有一个问题:序列化。为了得到锁,每一个要处理数据的线程都必须排队等候。如果线程被一把锁阻塞,它没有在做任何有用的事。当服务器的负载较轻时,这个问题并不常见,因为一次可能只有一个线程需要锁。在负载很重的情况下,对锁的激烈争夺可能就会成为一个大问题。

设想在多车道高速公路上发生了一个意外事故,这条高速公路上的所有车辆都被转向一条狭窄的道路。如果车辆很少,这一转换对交通流的速率的影响可以忽略。如果车辆很多,当车辆慢慢并入那条单通道时,交通阻塞会延伸几英里。

有几种技术能够减少锁竞争。

· 不要过分保护,也就是说,不是非常必要不要锁住数据。只有需要时才去持有锁,而且时间不要过长。不要在大段代码周围或频繁执行的代码中没必要地使用锁,这一点很重要。

· 对数据进行分割,使它能够用一套独立的锁保护。例如,一个符号表可以按标识符的第一个字母分割,这样在修改名字以Q开头的符号的值时,就不会去读名字以H开头的符号的值。

· 使用APIs的Interlocked 系列(InterlockedIncrement,InterlockedCompareExchangePointer等)自动修改数据而不需要锁。

· 当数据不是经常被修改时可以使用多读者/单作者(multi-reader/single-writer)锁。你将获得更好的并发性,尽管锁操作的代价将更高并且你可能会冒饿死作者的危险。

· 在关键部分使用循环计数器。参见Windows NT 4.0 service pack 3中的SetCriticalSectionSpinCount API。

· 如果你不能得到锁,使用TryEnterCriticalSection并做一些其他的有用的工作。

高竞争导致serialization,serialization导致降低CPU的利用率,这促使用户加入更多的线程,结果事情变得更糟。

6.不必注意多处理器机器

你的代码在多处理器系统上比在单处理器系统上运行得还要糟,这可能是件令人恶心的事。一个很自然的想法是,在一个N维系统上运行N次会更好。性能很差的原因是竞争:锁竞争,总线竞争,和/或缓存列竞争。处理器都在是争夺共享资源的所有权,而不是做更多的工作。

如果你一定要编写多线程应用程序的话,你应该在多处理器盒上对你的应用程序进行强度测试和性能测试。单处理器系统通过时间分片地执行线程而提供一个并发性的假象。多处理器盒具有真正的并发性,竞争环境和竞争更容易发生。

7.应该始终使用模块化调用;他们很有趣。

利用同步模块化调用来执行I/O操作对大多数桌面应用程序来说是合适的。但是,他们不是使用服务器上的CPU(s)的好方法。I/O操作要花费上百万个时钟周期来完成,这些时钟周期本来可以被更好地利用。利用异步I/O你能得到显著提高的用户请求率和I/O通量,不过增加了额外的复杂性。

如果你有需要花费很长时间的模块化调用或I/O操作,你应该考调拨多少资源给他们。你想使用所有的线程还是有个限制?一般地,使用有限的几个线程要好些。构建一个小的线程池和队列,利用队列来安排线程的工作完成模块化调用。这样,其他线程就可以拾取和处理你的非模块化的请求。

8.不要进行测量

当你能够测量你所谈论的事情并用数字表达它时,这就表示你对他有了一定的了解;但是如果你不能用数字表达时,你的知识是贫瘠的不能令人满意的;这可能是知识的开始,但这时你简直不可能将你的思想提高到科学的水平。

- Lord Kelvin (William Thomson)

如果不测量你就不能了解应用程序的特性。你在黑暗中摸索,一半是靠猜测。如果不识别性能问题,你就不能做任何改进或做出工作量计划。

测量包括黑匣子测量和profiling。黑匣子测量的意思是收集由性能计数器(内存使用,上下文交换,CPU利用等)和外部检测工具(通量,反映时间等)所显示的数据。为了profile你的代码,你编译代码的一个工具版,然后在各种条件下运行它,并收集关于执行时间和过程调用频率的统计数据。

测量如果不用于分析的话就一点用都没有。测量将不仅告诉你有问题,而且甚至能帮助你找到问题发生在哪,但它不能告诉你为什么会有问题。对问题进行分析以便你能正确地改正他们。要从根本上解决问题而不是停留在表面现象。

当你进行改动后,要重新测量。你要知道你的改动是否有效。改动也可能会暴露其他性能问题,测量-分析-改正-再测量的循环就会重新开始。你也必须要有规律地进行测量,以便发现性能衰退问题。

9.应该使用单一用户,单一请求的测试方法。

书写ASP和ISAPI应用程序的一个通病是只用一个浏览器去测试应用程序。当他们在Internet上应用他们的程序时,他们才发现他们的应用程序不能处理高负载,并且通量和反应时间另人可怜。

用一个浏览器测试是必要的但是不够的。如果浏览器反应得不够快,你就知道你有麻烦了。但即使它在使用一个浏览器时很快,你也不知道它处理负载的能力如何。如果十几个用户同时请求会发生什么事?一百个呢?你的应用程序能容忍什么样的通量?它能提供什么样的反应时间?在轻载时这些数字会怎样?中等负载呢?重载呢?在多处理器机器上你的应用程序会如何?对你的应用程序进行强度测试,这对于找出bugs发现性能问题来说是基本的。

类似的负载测试考虑适用于所有的服务器应用程序。

10.不应使用实际环境。

人们往往只在几个特定的,人工的环境(如下benchmarks)下调整应用程序。选择和实际情况相对应的各种情况,并为针对各种操作进行优化,这一点很重要。如果你不这样做,你的用户和评论家一定会这样做,并且他们将依此来评判你的应用程序的好坏。

最高哪个php版本支持iis6

PHP5.3x+IIS6完全配置方法,PHP5.3以上版本全新配置IIS方法 FastCGI方式(一...

在IIS6.0下安装Fastcgi+PHP来运行PHP程序(未装alpha),终于实现手工配置 IIS 6 下以 FastCGI 跑 PHP

PS:微软提升PHP在IIS下的性能 FastCGI Extension for IIS6.0% ~ d# L0 v T1 o D( U; ^; j

微软已经和PHP社区共同努力了一年之久,他们终于研发出 能让IIS更快地解析PHP的方法,用户们甚至不需要做基准测试就可以明显感觉到PHP解析速度加快.早在2006年,微软就和Zend等厂商一起研发 Windows Server下的优化工作,IIS产品组已经公布了IIS6和7的FastCGI扩展,它能让PHP执行效率更高. PHP一直以来是IIS的尴尬,用PHP扩展的速度跟不上其它服务端(甚至还有一些致命问题例如在某内存地址报错),而PHP又比ASP.net普及得 多,因此微软需要在IIS+PHP上突破市场. 微软去年底发布了ii6的fastcgi模块,可以免费下载,使用IIS6的您不妨在您的测试环境上试一下,没准会有惊喜哦! 今天将服务器上的php支持改成了fastcgi,目前运行稳定.fastcgi的iis模块可以让流行的应用框架在iis上支持fastcgi协议以提 供高性能和可用性的访问服务,fastcgi面向现有的网络服务器提供高性能的cgi替代标准。具体php安装方法我记录下来,其中包括出现的错误.

1.下载 FastCGI For IIS6 5 A( c* Z' E" t1 {. t, X

fcgisetup32.msi(FastCGI Extension for IIS 6.0 x86)- B: u, q, t' H" K: S4 t# J

下载:http//,选择: x86. ?8 ~ A7 t7 i

# ? i2 s' U f% K

或者直接下载:http//go.microsoft.com/?linkid=96556962 v$ { j7 X8 O ~

下载之后,双击运行进行安装。

(FakeCGI调试工具(备用):下载fake.zip http//blogs.iis.net/rickjames/attachment/1563148.ashx )

' @" ^! W# d' F. @# c5 [

安装后在 C:WINDOWSsystem32inetsrv 目录下产生了五个文件。如下图: B; a5 ]* v8 i% Z% b8 j2 q

同时在 IIS 的 “Web 服务扩展”里多了 FastCGI Handler。2 p3 o- h+ q, M/ d7 q

9 A- R; U( Q5 j8 `% W0 K* x- J. {

下载安装VC9运行库 即VISUAL C++ 2008

Microsoft Visual C++ 2008 Redistributable Package (x86)下载地址:

点击这里下载

2.下载 PHP5.3.0 Windows 版

由于PHP5.3的全新特效及改进,原有的isapi方式解析PHP脚本已经不被支持,PHP从5.3.0以后的版本开始使用微软的fastcgi模式,这是一个更先进的方式,运行速度更快,更稳定!

新版本的PHP5.3通过以往老方法已经不能在IIS上安装了,下载IIS下的PHP,下载地址http//windows.php.net/download/,(注意IIS下要选择VC9的版本)解压到所需目录,该目录需要给予

一、如何选择PHP5.3的VC9版本和VC6版本

VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。

VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。

二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本

先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。

再来看PHP的两种执行方式:ISAPI和FastCGI。

ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;

而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

user读取运行权限,

选择:PHP 5.3 (5.3.0)' Z* Z0 r% I) ~! F* r4 f+ V. R' b

VC9 x86 Thread Safe (2009-Jun-30 08:52:56) Zip [13.54MB]

sha1: f049c806744855e4420844d47e051949fcf06661

下载 .zip 格式的版本,解压缩下载的 php-5.3.0-Win32-VC9-x86.zip 文件,并将其复制到:X:Server_Corephp目录(你可以根据自己的意愿解压到别的目录。),并给 IIS 启动帐户组或用户赋予读取和运行权限。如下图:

+ A( b2 ^' Y6 K7 N9 ^8 _

: I" N9 {8 q: R* E' h9 j2 D

3. 注册 PHP 到 FastCGI % U3 L0 {. m1 @+ @# [

打开 C:WINDOWSsystem32inetsrvfcgiext.ini 文件。

; This is the configuration file for the FastCGI handler for IIS 6.0.: O: q. R4 u+ n9 f

; The FastCGI handler will look for this file in the same directory as

; fcgiext.dll. By default, the FastCGI installer will place this file into

; the %windir%system32inetsrv directory.

- E( a5 J3 l' R% H8 n

我个人的理解是,只要“Web 服务扩展”里的 FastCGI Handler 为允许时,在加载 fcgiext.dll 时,会读取 fcgiext.ini 配置文件的内容,根据里面的配置为每个网站提供映射。

在 [Types] 下添加以下配置: ; `9 c; v2 t9 b6 W- `; y' r9 H6 H7 S

[Types]/ K. X# n9 p4 I9 e

8 b, @+ K$ f6 }; c4 w

php=PHP

[PHP]

ExePath=X:Server_CorePHPphp-cgi.exe

这里要用:“”不能用“/”,“php”表示扩展名,“PHP”是配置节名称,以“[PHP]”定义。 (选你自己的安装的目录,下同。)

) U. P; P N: w0 |7 D' u" f h- e( c8 R

4. 配置 php.ini

将 X:Server_CorePHPphp.ini-production 复制一个,然后重命名为 X:Server_CorePHPphp.ini ! q4 H: N9 X) K. X9 e }( S

找到PHP安装目录下的php.ini-production并改名为php.ini文件,找到下面% n4 k. G8 ?4 N# K! P. B

[Date]7 R _* z$ ?% u' ? t' v

; Defines the default timezone used by the date functions

; http//php.net/date.timezone

; date.timezone =, E+ d8 |! L0 J; N

更改为并去除前面的“;”:

[Date]( c% H4 u" v2 ~4 h( R4 @4 K

; Defines the default timezone used by the date functions

; http//php.net/date.timezone

date.timezone = Asia/Shanghai Q, @2 J ^9 t s) Q0 J

如果不改以上的date.timezone可能打开网页会提示500错误

找到6 s- j% ?# x$ F, h

; On windows:

; extension_dir = "ext"

改为. R- g. Z+ ~8 " D: O9 g

; On windows:

extension_dir = "X:Server_CorePHPext"

9 V2 g8 k' a- V9 " T" u/ z

找到:fastcgi.impersonate = 1;这句,把前面的;去掉, fastcgi.impersonate = 1

如下图:

5 P5 K9 c- [ n0 J( D( n

找到:short_open_tag= Off;改为

short_open_tag= On3 n2 X2 Y3 c( v) a# y6 X0 g+ {# ]

8 F0 L5 ]7 h8 w6 z. w

至于php.ini里面的extension开启方式,根据自己所需,找到:Windows Extensions 在 Windows Extensions 下方的动态模块配置中,需要打开以下模块支持:(去掉模块配置每行前面的;号即可)比如我的是: 7 v; k* P1 c

;extension=php_bz2.dll: n+ O" R$ Z) _7 [* B( c( D. K

;extension=php_curl.dll

;extension=php_dba.dll' f6 Y* p3 T4 R% q- c4 ] Z7 G

extension=php_mbstring.dll" C* _: V3 z- F% m

extension=php_exif.dll7 l4 N2 N" e {

;extension=php_fileinfo.dll7 E( X0 ~7 r; C* F9 j

extension=php_gd2.dll5 x9 ^1 g8 Q5 S" B F

;extension=php_gettext.dll$ O' S. v1 i2 O$ q. H: O; G

;extension=php_gmp.dll

;extension=php_intl.dll

;extension=php_imap.dll

;extension=php_interbase.dll. a! M+ _) z: _ P* @

extension=php_ldap.dll

;extension=php_ming.dll

;extension=php_mssql.dll3 g0 O) n8 c6 }9 M9 T7 X

extension=php_mysql.dll

extension=php_mysqli.dll

;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client

;extension=php_oci8_11g.dll ; Use with Oracle 11g Instant Client

;extension=php_openssl.dll

;extension=php_pdo_firebird.dll

;extension=php_pdo_mssql.dll

;extension=php_pdo_mysql.dll

;extension=php_pdo_oci.dll. K0 q3 p6 t, ^# K) i* K

;extension=php_pdo_odbc.dll

;extension=php_pdo_pgsql.dll. { w3 O# E$ , U7 j% y$ r1 I

;extension=php_pdo_sqlite.dll

;extension=php_pgsql.dll$ T- g9 D 7 D3 Z+ n# S% U M

;extension=php_phar.dll

;extension=php_pspell.dll

;extension=php_shmop.dll

;extension=php_snmp.dll. K9 m+ o) O9 @7 W @0 N

;extension=php_soap.dll p S8 Q' s+ I, F0 L5 a1 v

;extension=php_sockets.dll

;extension=php_sqlite.dll

;extension=php_sqlite3.dll0 H5 ^$ l0 V7 g, M

;extension=php_sybase_ct.dll

;extension=php_tidy.dll2 m' J5 Q; A- T9 n

;extension=php_xmlrpc.dll

;extension=php_xsl.dll% h* t/ J" J) a8 t7 Q( I' n5 R9 F$ q

;extension=php_zip.dll

注意最后一个php_zip.dll这个在我下载下来的php5.3.0的ext内是不存在的,所以如果开启会报错误,如果实在需要这个DLL,可以从PHP5.2中拷贝过去(我的不行)

保存 php.ini 文件,并将其复制到 C:Windows ,并删除 X:Server_CorePHPphp.ini,不删除有时IIS报500错!

4 B0 M. ]9 U E3 d1 V

5. 配置网站 q% W* / n) c' `- Y

; t4 X! x( V, T! [) [2 |4 [

打开IIS管理器,网站上点右键-属性-主目录-配置-添加,配置如下图" j9 W, {" c4 S% @2 I1 x

Q6 _: a8 g, m q/ R, R

# ^% v* ?# G6 |

可执行文件路径:C:WINDOWSsystem32inetsrvfcgiext.dll

6.相关权限配置

C:WINDOWSsystem32inetsrvfcgiext.dll 的权限,NETWORK_SERVICE和IUSR_***(Internet来宾账户)的可读和运行权限。

PHP安装目录的权限,NETWORK_SERVICE的读和运行权限

网站所在目录的权限,IUSR_***(Internet来宾账户)的读取和运行权,需要写入的目录单独再给写入权

7. 写个 php 测试下吧

" m: |: h# L' b% y; }

修改完在IIS上或者命令提示符运行iisreset命令重启IIS服务,这步很重要!

( M6 w6 {! R y ~4 F

测试是否安装成功!

建立一个网站,phpinfo.php文件内容为:/ o+ p' n$ t8 T+ O( b2 s P. P

文件:phpinfo.php

?php

phpinfo();

?

6 j- O: M6 | [, p/ p t

看到类似以下效果说明你的服务器可以跑 php 了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。