Tomcat服务器安装的时候默认的端口设置是8080,通常我一看到端口是8080的网站,我就猜测服务器估计是Tomcat,一般来说网站的端口普遍。
是80,apache服务器的默认端口就是80,而80与8080端口有一点区别就是,如果你去访问80端口的网站,那么可以直接输入域名访问,而没必要。
带上80,因为80是http协议的默认端口;但是,如果是访问8080端口的网站,那么在输入域名以后还要加上8080才行。就是因为这个繁琐的操作,
所以我每次都会修改下端口,修改方法可以参考下面:
(1)首先找到tomcat的安装路径,找到路径conf文件夹下面的server.xml文件,如下图1所示。
图1:server.xml所在路径。
(2)用文本编辑器打开server.xml,修改其中端口,文件中端口有很多,比如8005,8080,8009等等,别的都可以不用管,视情况修改就好,我只修改了8080端口为80,直接查找8080替换成80就OK了,修改后的文件内容如下:
<?xml version='1.0' encoding='utf-8'?>。
<!--
Licensed to the Apache Software Foundation (ASF) under one or more。
contributor license agreements. See the NOTICE file distributed with。
this work for additional information regarding copyright ownership.。
The ASF licenses this file to You under the Apache License, Version 2.0。
(the "License"); you may not use this file except in compliance with。
the License. You may obtain a copy of the License at。
http://www.apache.org/licenses/LICENSE-2.0。
Unless required by applicable law or agreed to in writing, software。
distributed under the License is distributed on an "AS IS" BASIS,。
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.。
See the License for the specific language governing permissions and。
limitations under the License.。
-->
<!-- Note: A "Server" is not itself a "Container", so you may not。
define subcomponents such as "Valves" at this level.。
Documentation at /docs/config/server.html。
-->
<Server port="8005" shutdown="SHUTDOWN">。
<!--APR library loader. Documentation at /docs/apr.html -->。
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />。
<!--Initialize 小猫 prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->。
<Listener className="org.apache.catalina.core.小猫Listener" />。
<!-- Prevent memory leaks due to use of particular java/javax APIs-->。
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />。
<!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->。
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />。
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />。
<!-- Global JNDI resources。
Documentation at /docs/jndi-resources-howto.html。
-->
<GlobalNamingResources>。
<!-- Editable user database that can also be used by。
UserDatabaseRealm to authenticate users。
-->
<Resource name="UserDatabase" auth="Container"。
type="org.apache.catalina.UserDatabase"。
description="User database that can be updated and saved"。
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"。
pathname="conf/tomcat-users.xml" />。
</GlobalNamingResources>。
<!-- A "Service" is a collection of one or more "Connectors" that share。
a single "Container" Note: A "Service" is not itself a "Container", 。
so you may not define subcomponents such as "Valves" at this level.。
Documentation at /docs/config/service.html。
-->
<Service name="Catalina">。
<!--The connectors can use a shared executor, you can define one or more named thread pools-->。
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 。
maxThreads="150" minSpareThreads="4"/>。
-->
<!-- A "Connector" represents an endpoint by which requests are received。
and responses are returned. Documentation at :。
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)。
Java AJP Connector: /docs/config/ajp.html。
APR (HTTP/AJP) Connector: /docs/apr.html。
Define a non-SSL HTTP/1.1 Connector on port 8080。
-->
<Connector port="80" protocol="HTTP/1.1" 。
connectionTimeout="20000" 。
redirectPort="8443" />。
<!-- A "Connector" using the shared thread pool-->。
<!--
<Connector executor="tomcatThreadPool"。
port="8080" protocol="HTTP/1.1" 。
connectionTimeout="20000" 。
redirectPort="8443" />。
--> 。
<!-- Define a SSL HTTP/1.1 Connector on port 8443。
This connector uses the JSSE configuration, when using APR, the 。
connector should be using the OpenSSL style configuration。
described in the APR documentation -->。
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"。
maxThreads="150" scheme="https" secure="true"。
clientAuth="false" sslProtocol="TLS" />。
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />。
<!-- An Engine represents the entry point (within Catalina) that processes。
every request. The Engine implementation for Tomcat stand alone。
analyzes the HTTP headers included with the request, and passes them。
on to the appropriate Host (virtual host).。
Documentation at /docs/config/engine.html -->。
<!-- You should set jvmRoute to support load-balancing via AJP ie :。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> 。
-->
<Engine name="Catalina" defaultHost="localhost">。
<!--For clustering, please take a look at documentation at:。
/docs/cluster-howto.html (simple how to)。
/docs/config/cluster.html (reference documentation) -->。
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>。
--> 。
<!-- The request dumper valve dumps useful debugging information about。
the request and response data received and sent by Tomcat.。
Documentation at: /docs/config/valve.html -->。
<!--
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>。
-->
<!-- This Realm uses the UserDatabase configured in the global JNDI。
resources under the key "UserDatabase". Any edits。
that are performed against this UserDatabase are immediately。
available for use by the Realm. -->。
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"。
resourceName="UserDatabase"/>。
<!-- Define the default virtual host。
Note: XML Schema validation will not work with Xerces 2.2.。
-->
<Host name="localhost" appBase="webapps"。
unpackWARs="true" autoDeploy="true"。
xmlValidation="false" xmlNamespaceAware="false">。
<!-- SingleSignOn valve, share authentication between web applications。
Documentation at: /docs/config/valve.html -->。
<!--。
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />。
-->
<!-- Access log processes all example.。
Documentation at: /docs/config/valve.html -->。
<!--。
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 。
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>。
-->
</Host>。
</Engine>。
</Service>。
</Server>。
(3)修改server.xml文件以后,重启tomcat服务器,配置修改成功。
你有更改应用程序池标识用户的密码吧?
这样的话需要做这些操作,1是更改应用程序池标识密码,2是修改SharePoint服务(Timer、Search)启动账户密码。
然后执行IISReset.
1.首先,看了看SQL Server服务器属性的配置,看到连接数为0,即不限制,SQLserver最大连接数为32767。看来应该不是这里的问题。
2.百度了一下,发现可能是程序的数据库连接字符串出了问题。
自己写了个代码测试一下
class Program
private static void Main(string[] args)。
TestSQLServerConnectionCount();。
Console.Read();。
public static void TestSQLServerConnectionCount()。
try
int maxCount = 40000;。
string connectionString =。
"Data Source=localhost;Initial Catalog=EveryDayTest;User Id=sa;Password=sa123;";。
for (int i = 1; i < maxCount; i++)。
var db = new SqlConnection(connectionString);。
db.Open();
Console.WriteLine("已创建连接对象" + i);。
catch (Exception ex)。
Console.WriteLine(ex.Message);。
发现最多只能创建100个,
然后添加了属性Max Pool Size=101,又测了一下,恩可以了。
。恩果然是这里,不过。在测试系统的时候发现,有的时候连接数到达40多或60多或80多后就不再增长了,难道说这里有个重复利用数据库连接的机制?
找了一下,发现有个Pooling属性,默认为true,于是加上了这条Pooling=false,运行一下。
哇擦,已经超过了32767!!!难道说这个属性可以让连接反复利用,从连接池取出来可以再次使用的连接对象?还是说根本不受连接池的最大限制?
果然,看了一下连接池的运行方式发现:
1、当一个程序执行Connection.open()时候,ADO.net就需要判断,此连接是否支持Connection Pool (Pooling 默认为True)。
(1)、如果指定为False, ADO.net就与数据库之间创建一个连接,然后返回给程序。
(2)、如果指定为 True,ADO.net就会根据ConnectString创建一个Connection Pool,然后向Connection Pool中填充Connection。填充多少个Connection由Min Pool Size (默认为0)属性来决定。例如如果指定为5,则ADO.net会一次与SQL数据库之间打开5个连接,然后将4个Connection,保存在 Connection Pool中,1个Connection返回给程序。
2、当程序执行到Connection.close() 的时候。如果Pooling 为True,ADO.net 就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。
同时还会判断Connection Lifetime(默认为0)属性,0代表无限大,如果Connection存在的时间超过了Connection LifeTime,ADO.net就会关闭的Connection同时断开与数据库的连接,而不是重新保存到Connection Pool中。
3、当下一次Connection.Open() 执行的时候,ADO.Net就会判断新的ConnectionString与之前保存在Connection Pool中的Connection的connectionString是否一致。
4、 ADO.net需要判断当前的Connection Pool中是否有可以使用的Connection(没有被其他程序所占用),如果没有的话,ADO.net就需要判断ConnectionString设 置的Max Pool Size (默认为100)
(1)、如果Connection Pool中的所有Connection没有达到Max Pool Size,ADO.net则会再次连接数据库,创建一个连接,然后将Connection返回给程序。
(2)、如果已经达到了 MaxPoolSize,ADO.net就不会再次创建任何新的连接,而是等待Connection Pool中被其他程序所占用的Connection释放,这个等待时间受SqlConnection.ConnectionTimeout(默认是15 秒)限制,也就是说如果时间超过了15秒,SqlConnection就会抛出超时错误。
5、如果有可用的Connection,从Connection Pool 取出的Connection也不是直接就返回给程序,ADO.net还需要检查ConnectionString的ConnectionReset属性 (默认为True)是否需要对Connection 最一次reset。
-------------------摘自《http://www.studyofnet.com/news/637.html 数据库最大连接池max pool size》
不过,为什么系统测试时到了60左右的连接数不再增长了?max。
MySQL 自身内存规划
说到 MySQL 自身的内存规划,最先想到的就是 MySQL 中各种 buffer 的大小,innodb buffer pool 就是最鹤立鸡群的那个。innodb_buffer_pool_size 参数的大小究竟如何设置,才能保证 MySQL 的性能呢?在官网文档中可以找到这个参数的一些描述:
A larger buffer pool requires less disk I/O to access the same table data more than once. On a dedicated database server, you might set the buffer pool size to 80% of the machine's physical memory size.。
意思是在专用数据库服务器上,可以将 innodb_buffer_pool_size 设置为计算机物理内存大小的 80%。在许许多多前辈的的经验中了解到,此参数的值设置为物理内存的 50%~80% 颇为合理。
举个栗子:
innodb buffer pool 分配 76G,每个连接线程最大可用 160M,最大有 3000 连接数,最大可能使用内存总量 545G,但是这台实例所在服务器的物理内存仅仅有 97G,远超物理内存总量。结果可想而知,这个实例在运行中经常被 oom-killer 杀死,想必原因之一即是因为一开始 MySQL 自身的内存规划欠妥。
innodb buffer pool 缓存数据的作用相信大家都懂,比如这个 case 中,可以发现该实例为写密集,读请求很少,innodb buffer 对性能改善作用不大,80% 的内存没必要,完全可以降低到物理内存的50%。
开始-运行-cmd, 输入 netstat -ano, 看第一列,后面的就是端口,找到80 ,记住对应的PID!!。
然后打开任务管理器 查看 -> 选择列 -> 勾上 PID(进程标识符) -> 确定。
在任务管理器找到刚才的PID的进程,查看是什么程序占用了端口,把它关闭!!!追问但是4896显示的进程是tomcat6 关闭以后调试没反应啊 。
回答上面的英文显示 tomcat 已经在另一个进程中运行了, 您再打开就已经重复了。。。是否运行了其他服务器程序,附带启动了comcat 进程。
严重: Error starting endpoint。
java.net.BindException: Address already in use: JVM_Bind:8080。
at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:298)。
at org.apache.tomcat.util.net.PoolTcpEndpoint.startEndpoint(PoolTcpEndpoint.java:313)。
at org.apache.coyote.http11.Http11BaseProtocol.start(Http11BaseProtocol.java:151)。
at org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:76)。
at org.apache.catalina.connector.Connector.start(Connector.java:1090)。
at org.apache.catalina.core.StandardService.start(StandardService.java:457)。
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)。
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)。
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)。
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)。
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)。
at java.lang.reflect.Method.invoke(Method.java:585)。
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)。
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)。
2009-7-12 15:40:35 org.apache.catalina.startup.Catalina start。
严重: Catalina.start: 。
LifecycleException: service.getName(): "Catalina"; Protocol handler start failed: java.net.BindException: Address already in use: JVM_Bind:8080。
at org.apache.catalina.connector.Connector.start(Connector.java:1097)。
at org.apache.catalina.core.StandardService.start(StandardService.java:457)。
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)。
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)。
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)。
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)。
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)。
at java.lang.reflect.Method.invoke(Method.java:585)。
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)。
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)。
2009-7-12 15:40:35 org.apache.catalina.startup.Catalina start。
信息: Server startup in 9860 ms。
关键信息:
java.net.BindException: Address already in use: JVM_Bind:8080。
错误原因:
8080端口被其他的应用占用!
解决方案:
第一步,命令提示符号,执行命令:netstat –ano。
Active Connections。
Proto Local Address Foreign Address State PID。
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 656。
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 656。
可见,占用8080端口的进程的PID是656。
第二步,命令提示符号,执行命令:tasklist。
图像名 PID 会话名 会话# 内存使用 。
========================= ====== ================ ======== ============。
TNSLSNR.exe 656 Console 0 8,992 K。
可见,该占用8080端口的进程是TNSLSNR.exe。
第三步,通过任务管理器,终止进程TNSLSNR.exe。
第四步,重新启动tomcat,即可正常启动。