當前位置:首頁 » 編程軟體 » 編譯鏈接書

編譯鏈接書

發布時間: 2022-06-08 08:00:55

① 求教伺服器tcp連接數被占滿的有關問題

我問了在約APP的專家,修改上述限制的最簡單的辦法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n
上述命令中,在中指定要設置的單一進程允許打開的最大文件數。如果系統回顯類似於「Operation notpermitted」之類的話,說明上述限制修改失敗,實際上是因為在中指定的數值超過了linux系統對該用戶打開文件數的軟限制或硬限制。因此,就需要修改Linux系統對用戶的關於打開文件數的軟限制和硬限制。
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪個用戶的打開文件數限制,可用』*'號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大打開文件數(請注意軟限制值要小於或等於硬限制)。修改完後保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
這是告訴Linux在用戶完成系統登錄後,應該調用pam_limits.so模塊來設置系統對該用戶可使用的各種資源數量的最大限制(包括用戶可打開的最大文件數限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。修改完後保存此文件。
第三步,查看Linux系統級的最大打開文件數限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
這表明這台Linux系統最多允許同時打開(即包含所有用戶打開文件數總和)12158個文件,是Linux系統級硬限制,所有用戶級的打開文件數限制都不應超過這個數值。通常這個系統級硬限制是Linux系統在啟動時根據系統硬體資源狀況計算出來的最佳的最大同時打開文件數限制,如果沒有特殊需要,不應該修改此限制,除非想為用戶級打開文件數限制設置超過此限制的值。修改此硬限制的方法是修改/etc/rc.local腳本,在腳本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
這是讓Linux在啟動完成後強行將系統級打開文件數硬限制設置為22158。修改完後保存此文件。
完成上述步驟後重啟系統,一般情況下就可以將Linux系統對指定用戶的單一進程允許同時打開的最大文件數限制設為指定的數值。如果重啟後用 ulimit-n命令查看用戶可打開文件數限制仍然低於上述步驟中設置的最大值,這可能是因為在用戶登錄腳本/etc/profile中使用ulimit -n命令已經將用戶可同時打開的文件數做了限制。由於通過ulimit-n修改系統對用戶可同時打開文件的最大數限制時,新修改的值只能小於或等於上次 ulimit-n設置的值,因此想用此命令增大這個限制值是不可能的。所以,如果有上述問題存在,就只能去打開/etc/profile腳本文件,在文件中查找是否使用了ulimit-n限制了用戶可同時打開的最大文件數量,如果找到,則刪除這行命令,或者將其設置的值改為合適的值,然後保存文件,用戶退出並重新登錄系統即可。
通過上述步驟,就為支持高並發TCP連接處理的通訊處理程序解除關於打開文件數量方面的系統限制。
2、修改網路內核對TCP連接的有關限制(參考對比下篇文章「優化內核參數」)
在Linux上編寫支持高並發TCP連接的客戶端通訊處理程序時,有時會發現盡管已經解除了系統對用戶同時打開文件數的限制,但仍會出現並發TCP連接數增加到一定數量時,再也無法成功建立新的TCP連接的現象。出現這種現在的原因有多種。
第一種原因可能是因為Linux網路內核對本地埠號范圍有限制。此時,進一步分析為什麼無法建立TCP連接,會發現問題出在connect()調用返回失敗,查看系統錯誤提示消息是「Can』t assign requestedaddress」。同時,如果在此時用tcpmp工具監視網路,會發現根本沒有TCP連接時客戶端發SYN包的網路流量。這些情況說明問題在於本地Linux系統內核中有限制。其實,問題的根本原因在於Linux內核的TCP/IP協議實現模塊對系統中所有的客戶端TCP連接對應的本地埠號的范圍進行了限制(例如,內核限制本地埠號的范圍為1024~32768之間)。當系統中某一時刻同時存在太多的TCP客戶端連接時,由於每個TCP客戶端連接都要佔用一個唯一的本地埠號(此埠號在系統的本地埠號范圍限制中),如果現有的TCP客戶端連接已將所有的本地埠號占滿,則此時就無法為新的TCP客戶端連接分配一個本地埠號了,因此系統會在這種情況下在connect()調用中返回失敗,並將錯誤提示消息設為「Can』t assignrequested address」。有關這些控制邏輯可以查看Linux內核源代碼,以linux2.6內核為例,可以查看tcp_ipv4.c文件中如下函數:
static int tcp_v4_hash_connect(struct sock *sk)
請注意上述函數中對變數sysctl_local_port_range的訪問控制。變數sysctl_local_port_range的初始化則是在tcp.c文件中的如下函數中設置:
void __init tcp_init(void)
內核編譯時默認設置的本地埠號范圍可能太小,因此需要修改此本地埠范圍限制。
第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_local_port_range = 1024 65000
這表明將系統對本地埠范圍限制設置為1024~65000之間。請注意,本地埠范圍的最小值必須大於或等於1024;而埠范圍的最大值則應小於或等於65535。修改完後保存此文件。
第二步,執行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系統沒有錯誤提示,就表明新的本地埠范圍設置成功。如果按上述埠范圍進行設置,則理論上單獨一個進程最多可以同時建立60000多個TCP客戶端連接。
第二種無法建立TCP連接的原因可能是因為Linux網路內核的IP_TABLE防火牆對最大跟蹤的TCP連接數有限制。此時程序會表現為在 connect()調用中阻塞,如同死機,如果用tcpmp工具監視網路,也會發現根本沒有TCP連接時客戶端發SYN包的網路流量。由於 IP_TABLE防火牆在內核中會對每個TCP連接的狀態進行跟蹤,跟蹤信息將會放在位於內核內存中的conntrackdatabase中,這個資料庫的大小有限,當系統中存在過多的TCP連接時,資料庫容量不足,IP_TABLE無法為新的TCP連接建立跟蹤信息,於是表現為在connect()調用中阻塞。此時就必須修改內核對最大跟蹤的TCP連接數的限制,方法同修改內核對本地埠號范圍的限制是類似的:
第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_conntrack_max = 10240
這表明將系統對最大跟蹤的TCP連接數限制設置為10240。請注意,此限制值要盡量小,以節省對內核內存的佔用。
第二步,執行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系統沒有錯誤提示,就表明系統對新的最大跟蹤的TCP連接數限制修改成功。如果按上述參數進行設置,則理論上單獨一個進程最多可以同時建立10000多個TCP客戶端連接。
3、使用支持高並發網路I/O的編程技術
在Linux上編寫高並發TCP連接應用程序時,必須使用合適的網路I/O技術和I/O事件分派機制。
可用的I/O技術有同步I/O,非阻塞式同步I/O(也稱反應式I/O),以及非同步I/O。在高TCP並發的情形下,如果使用同步I/O,這會嚴重阻塞程序的運轉,除非為每個TCP連接的I/O創建一個線程。但是,過多的線程又會因系統對線程的調度造成巨大開銷。因此,在高TCP並發的情形下使用同步 I/O是不可取的,這時可以考慮使用非阻塞式同步I/O或非同步I/O。非阻塞式同步I/O的技術包括使用select(),poll(),epoll等機制。非同步I/O的技術就是使用AIO。
從I/O事件分派機制來看,使用select()是不合適的,因為它所支持的並發連接數有限(通常在1024個以內)。如果考慮性能,poll()也是不合適的,盡管它可以支持的較高的TCP並發數,但是由於其採用「輪詢」機制,當並發數較高時,其運行效率相當低,並可能存在I/O事件分派不均,導致部分TCP連接上的I/O出現「飢餓」現象。而如果使用epoll或AIO,則沒有上述問題(早期Linux內核的AIO技術實現是通過在內核中為每個 I/O請求創建一個線程來實現的,這種實現機制在高並發TCP連接的情形下使用其實也有嚴重的性能問題。但在最新的Linux內核中,AIO的實現已經得到改進)。
綜上所述,在開發支持高並發TCP連接的Linux應用程序時,應盡量使用epoll或AIO技術來實現並發的TCP連接上的I/O控制,這將為提升程序對高並發TCP連接的支持提供有效的I/O保證。
內核參數sysctl.conf的優化
/etc/sysctl.conf 是用來控制linux網路的配置文件,對於依賴網路的程序(如web伺服器和cache伺服器)非常重要,RHEL默認提供的最好調整。
推薦配置(把原/etc/sysctl.conf內容清掉,把下面內容復制進去):
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
這個配置參考於cache伺服器varnish的推薦配置和SunOne 伺服器系統優化的推薦配置。
varnish調優推薦配置的地址為:http://varnish.projects.linpro.no/wiki/Performance
不過varnish推薦的配置是有問題的,實際運行表明「net.ipv4.tcp_fin_timeout = 3」的配置會導致頁面經常打不開;並且當網友使用的是IE6瀏覽器時,訪問網站一段時間後,所有網頁都會打不開,重啟瀏覽器後正常。可能是國外的網速快吧,我們國情決定需要調整「net.ipv4.tcp_fin_timeout = 10」,在10s的情況下,一切正常(實際運行結論)。
修改完畢後,執行:
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1
命令生效。為了保險起見,也可以reboot系統。
調整文件數:
linux系統優化完網路必須調高系統允許打開的文件數才能支持大的並發,默認1024是遠遠不夠的。
執行命令:
Shell代碼
echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile
ulimit -HSn 65536

② 如何刷新max_connections數值,讓他來的連接數歸零重新連接

調整此參數的方法有幾種,既可以在編譯的時候設置,也可以在Mysql配置文件 my.cnf 中設置,也可以直接使用命令調整並立即生效。
1、在編譯的時候設置默認最大連接數
打開MySQL的源碼,進入sql目錄,修改mysqld.cc文件:

復制代碼代碼如下:

{"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) &max_connections,
(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,
0},

紅色的」100″即為該參數的默認值,修改為想要的數值,存檔退出。然後執行

復制代碼代碼如下:

./configure;make;make install

重新編譯安裝MySQL;注意,由於編譯安裝且修改了MySQL源碼,此操作最好在安裝MySQL之前進行;
2、在配置文件my.cnf中設置max_connections的值
打開MySQL配置文件my.cnf

復制代碼代碼如下:

[root@www ~]# vi /etc/my.cnf

找到max_connections一行,修改為(如果沒有,則自己添加),

復制代碼代碼如下:

max_connections = 1000

上面的1000即該參數的值。
3、實時(臨時)修改此參數的值
首先登陸mysql,執行如下命令:

復制代碼代碼如下:

[root@www ~]# mysql -uroot -p

然後輸入MySQL Root的密碼。
查看當前的Max_connections參數值:

復制代碼代碼如下:

mysql> SELECT @@MAX_CONNECTIONS AS 'Max Connections';

設置該參數的值:

復制代碼代碼如下:

mysql> set GLOBAL max_connections=1000;

(注意上面命令的大小寫)
修改完成後實時生效,無需重啟MySQL。
總體來說,該參數在伺服器資源夠用的情況下應該盡量設置大,以滿足多個客戶端同時連接的需求。否則將會出現類似」Too many connections」的錯誤。

③ nginx 伺服器 httpd 連接數是怎麼算的

Nginx的ngx_http_stub_status_mole提供能夠獲取Nginx自上次啟動以來的工作狀態的功能。如果需要啟用此功能的話,需要在編譯的過程中添加如下參數:「--with-http_stub_status_mole」,該模塊在需要放到server裡面的。

④ 如何 編譯 ngx

一、必要軟體准備
1.安裝pcre

為了支持rewrite功能,我們需要安裝pcre

復制代碼代碼如下:
# yum install pcre* //如過你已經裝了,請跳過這一步

2.安裝openssl
需要ssl的支持,如果不需要ssl支持,請跳過這一步

復制代碼代碼如下:
# yum install openssl*

3.gzip 類庫安裝

復制代碼代碼如下:
yum install zlib zlib-devel

4.安裝wget
下載nginx使用,如果已經安裝,跳過這一步

復制代碼代碼如下:
# yum install wget

二、安裝nginx

1.下載

復制代碼代碼如下:
wget http://nginx.org/download/nginx-1.7.0.tar.gz

2.解壓

復制代碼代碼如下:

tar -zxvf nginx-1.7.0.tar.gz

3.編譯和安裝
執行如下命令:

復制代碼代碼如下:

# cd nginx-1.7.0
# ./configure --prefix=/usr/local/nginx-1.7.0 \
--with-http_ssl_mole --with-http_spdy_mole \
--with-http_stub_status_mole --with-pcre

–with-http_stub_status_mole:支持nginx狀態查詢
–with-http_ssl_mole:支持https
–with-http_spdy_mole:支持google的spdy,想了解請網路spdy,這個必須有ssl的支持
–with-pcre:為了支持rewrite重寫功能,必須制定pcre

最後輸出如下內容,表示configure OK了。

復制代碼代碼如下:

checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx-1.7.0"
nginx binary file: "/usr/local/nginx-1.7.0/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx-1.7.0/conf"
nginx configuration file: "/usr/local/nginx-1.7.0/conf/nginx.conf"
nginx pid file: "/usr/local/nginx-1.7.0/logs/nginx.pid"
nginx error log file: "/usr/local/nginx-1.7.0/logs/error.log"
nginx http access log file: "/usr/local/nginx-1.7.0/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
# make //確定你的伺服器有安裝make,如果沒有安裝請執行yum install make

# make install

三、啟動、關閉、重置nginx
啟動:直接執行以下命令,nginx就啟動了,不需要改任何配置文件,nginx配置多域名虛擬主機請參考後續文章.

復制代碼代碼如下:
/usr/local/nginx-1.7.0/sbin/nginx

試試訪問:直接使用curl命令來讀取web信息

復制代碼代碼如下:

[root@ns conf]
# curl -s http://localhost | grep nginx.com
nginx.com.

關閉:

復制代碼代碼如下:
/usr/local/nginx-1.7.0/sbin/nginx -s stop

重置:當你有修改配置文件的時候,只需要reload以下即可

復制代碼代碼如下:
/usr/local/nginx-1.7.0/sbin/nginx -s reload

整個nginx的安裝就到這里結束了。

四、nginx編譯參數詳解

復制代碼代碼如下:

–prefix= 指向安裝目錄
–sbin-path 指向(執行)程序文件(nginx)
–conf-path= 指向配置文件(nginx.conf)
–error-log-path= 指向錯誤日誌目錄
–pid-path= 指向pid文件(nginx.pid)
–lock-path= 指向lock文件(nginx.lock)(安裝文件鎖定,防止安裝文件被別人利用,或自己誤操作。)
–user= 指定程序運行時的非特權用戶
–group= 指定程序運行時的非特權用戶組
–builddir= 指向編譯目錄
–with-rtsig_mole 啟用rtsig模塊支持(實時信號)
–with-select_mole 啟用select模塊支持(一種輪詢模式,不推薦在高載環境下使用)禁用:–without-select_mole
–with-poll_mole 啟用poll模塊支持(功能與select相同,與select特性相同,為一種輪詢模式,不推薦在高載環境下使用)
–with-file-aio 啟用file aio支持(一種APL文件傳輸格式)
–with-ipv6 啟用ipv6支持
–with-http_ssl_mole 啟用ngx_http_ssl_mole支持(使支持https請求,需已安裝openssl)
–with-http_realip_mole 啟用ngx_http_realip_mole支持(這個模塊允許從請求標頭更改客戶端的IP地址值,默認為關)
–with-http_addition_mole 啟用ngx_http_addition_mole支持(作為一個輸出過濾器,支持不完全緩沖,分部分響應請求)
–with-http_xslt_mole 啟用ngx_http_xslt_mole支持(過濾轉換XML請求)
–with-http_image_filter_mole 啟用ngx_http_image_filter_mole支持(傳輸JPEG/GIF/PNG 圖片的一個過濾器)(默認為不啟用。gd庫要用到)
–with-http_geoip_mole 啟用ngx_http_geoip_mole支持(該模塊創建基於與MaxMind GeoIP二進制文件相配的客戶端IP地址的ngx_http_geoip_mole變數)
–with-http_sub_mole 啟用ngx_http_sub_mole支持(允許用一些其他文本替換nginx響應中的一些文本)
–with-http_dav_mole 啟用ngx_http_dav_mole支持(增加PUT,DELETE,MKCOL:創建集合,COPY和MOVE方法)默認情況下為關閉,需編譯開啟
–with-http_flv_mole 啟用ngx_http_flv_mole支持(提供尋求內存使用基於時間的偏移量文件)
–with-http_gzip_static_mole 啟用ngx_http_gzip_static_mole支持(在線實時壓縮輸出數據流)
–with-http_random_index_mole 啟用ngx_http_random_index_mole支持(從目錄中隨機挑選一個目錄索引)
–with-http_secure_link_mole 啟用ngx_http_secure_link_mole支持(計算和檢查要求所需的安全鏈接網址)
–with-http_degradation_mole 啟用ngx_http_degradation_mole支持(允許在內存不足的情況下返回204或444碼)
–with-http_stub_status_mole 啟用ngx_http_stub_status_mole支持(獲取nginx自上次啟動以來的工作狀態)
–without-http_charset_mole 禁用ngx_http_charset_mole支持(重新編碼web頁面,但只能是一個方向–伺服器端到客戶端,並且只有一個位元組的編碼可以被重新編碼)
–without-http_gzip_mole 禁用ngx_http_gzip_mole支持(該模塊同-with-http_gzip_static_mole功能一樣)
–without-http_ssi_mole 禁用ngx_http_ssi_mole支持(該模塊提供了一個在輸入端處理處理伺服器包含文件(SSI)的過濾器,目前支持SSI命令的列表是不完整的)
–without-http_userid_mole 禁用ngx_http_userid_mole支持(該模塊用來處理用來確定客戶端後續請求的cookies)
–without-http_access_mole 禁用ngx_http_access_mole支持(該模塊提供了一個簡單的基於主機的訪問控制。允許/拒絕基於ip地址)
–without-http_auth_basic_mole禁用ngx_http_auth_basic_mole(該模塊是可以使用用戶名和密碼基於http基本認證方法來保護你的站點或其部分內容)
–without-http_autoindex_mole 禁用disable ngx_http_autoindex_mole支持(該模塊用於自動生成目錄列表,只在ngx_http_index_mole模塊未找到索引文件時發出請求。)
–without-http_geo_mole 禁用ngx_http_geo_mole支持(創建一些變數,其值依賴於客戶端的IP地址)
–without-http_map_mole 禁用ngx_http_map_mole支持(使用任意的鍵/值對設置配置變數)
–without-http_split_clients_mole 禁用ngx_http_split_clients_mole支持(該模塊用來基於某些條件劃分用戶。條件如:ip地址、報頭、cookies等等)
–without-http_referer_mole 禁用disable ngx_http_referer_mole支持(該模塊用來過濾請求,拒絕報頭中Referer值不正確的請求)
–without-http_rewrite_mole 禁用ngx_http_rewrite_mole支持(該模塊允許使用正則表達式改變URI,並且根據變數來轉向以及選擇配置。如果在server級別設置該選項,那麼他們將在 location之前生效。如果在location還有更進一步的重寫規則,location部分的規則依然會被執行。如果這個URI重寫是因為location部分的規則造成的,那麼 location部分會再次被執行作為新的URI。 這個循環會執行10次,然後Nginx會返回一個500錯誤。)
–without-http_proxy_mole 禁用ngx_http_proxy_mole支持(有關代理伺服器
–without-http_fastcgi_mole 禁用ngx_http_fastcgi_mole支持(該模塊允許Nginx 與FastCGI 進程交互,並通過傳遞參數來控制FastCGI 進程工作。 )FastCGI一個常駐型的公共網關介面。
–without-http_uwsgi_mole 禁用ngx_http_uwsgi_mole支持(該模塊用來醫用uwsgi協議,uWSGI伺服器相關)
–without-http_scgi_mole 禁用ngx_http_scgi_mole支持(該模塊用來啟用SCGI協議支持,SCGI協議是CGI協議的替代。它是一種應用程序與HTTP服務介面標准。它有些像FastCGI但他的設計 更容易實現。)
–without-http_memcached_mole 禁用ngx_http_memcached_mole支持(該模塊用來提供簡單的緩存,以提高系統效率)
-without-http_limit_zone_mole 禁用ngx_http_limit_zone_mole支持(該模塊可以針對條件,進行會話的並發連接數控制)
–without-http_limit_req_mole 禁用ngx_http_limit_req_mole支持(該模塊允許你對於一個地址進行請求數量的限制用一個給定的session或一個特定的事件)
–without-http_empty_gif_mole 禁用ngx_http_empty_gif_mole支持(該模塊在內存中常駐了一個1*1的透明GIF圖像,可以被非常快速的調用)
–without-http_browser_mole 禁用ngx_http_browser_mole支持(該模塊用來創建依賴於請求報頭的值。如果瀏覽器為modern ,則$modern_browser等於modern_browser_value指令分配的值;如 果瀏覽器為old,則$ancient_browser等於 ancient_browser_value指令分配的值;如果瀏覽器為 MSIE中的任意版本,則 $msie等於1)
–without-http_upstream_ip_hash_mole 禁用ngx_http_upstream_ip_hash_mole支持(該模塊用於簡單的負載均衡)
–with-http_perl_mole 啟用ngx_http_perl_mole支持(該模塊使nginx可以直接使用perl或通過ssi調用perl)
–with-perl_moles_path= 設定perl模塊路徑
–with-perl= 設定perl庫文件路徑
–http-log-path= 設定access log路徑
–http-client-body-temp-path= 設定http客戶端請求臨時文件路徑
–http-proxy-temp-path= 設定http代理臨時文件路徑
–http-fastcgi-temp-path= 設定http fastcgi臨時文件路徑
–http-uwsgi-temp-path= 設定http uwsgi臨時文件路徑
–http-scgi-temp-path= 設定http scgi臨時文件路徑
-without-http 禁用http server功能
–without-http-cache 禁用http cache功能
–with-mail 啟用POP3/IMAP4/SMTP代理模塊支持
–with-mail_ssl_mole 啟用ngx_mail_ssl_mole支持
–without-mail_pop3_mole 禁用pop3協議(POP3即郵局協議的第3個版本,它是規定個人計算機如何連接到互聯網上的郵件伺服器進行收發郵件的協議。是網際網路電子郵件的第一個離線協議標 准,POP3協議允許用戶從伺服器上把郵件存儲到本地主機上,同時根據客戶端的操作刪除或保存在郵件伺服器上的郵件。POP3協議是TCP/IP協議族中的一員,主要用於 支持使用客戶端遠程管理在伺服器上的電子郵件)
–without-mail_imap_mole 禁用imap協議(一種郵件獲取協議。它的主要作用是郵件客戶端可以通過這種協議從郵件伺服器上獲取郵件的信息,下載郵件等。IMAP協議運行在TCP/IP協議之上, 使用的埠是143。它與POP3協議的主要區別是用戶可以不用把所有的郵件全部下載,可以通過客戶端直接對伺服器上的郵件進行操作。)
–without-mail_smtp_mole 禁用smtp協議(SMTP即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每台計算機在發送或中轉信件時找到下一個目的地。)
–with-google_perftools_mole 啟用ngx_google_perftools_mole支持(調試用,剖析程序性能瓶頸)
–with-cpp_test_mole 啟用ngx_cpp_test_mole支持
–add-mole= 啟用外部模塊支持
–with-cc= 指向C編譯器路徑
–with-cpp= 指向C預處理路徑
–with-cc-opt= 設置C編譯器參數(PCRE庫,需要指定–with-cc-opt=」-I /usr/local/include」,如果使用select()函數則需要同時增加文件描述符數量,可以通過–with-cc- opt=」-D FD_SETSIZE=2048」指定。)
–with-ld-opt= 設置連接文件參數。(PCRE庫,需要指定–with-ld-opt=」-L /usr/local/lib」。)
–with-cpu-opt= 指定編譯的CPU,可用的值為: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
–without-pcre 禁用pcre庫
–with-pcre 啟用pcre庫
–with-pcre= 指向pcre庫文件目錄
–with-pcre-opt= 在編譯時為pcre庫設置附加參數
–with-md5= 指向md5庫文件目錄(消息摘要演算法第五版,用以提供消息的完整性保護)
–with-md5-opt= 在編譯時為md5庫設置附加參數
–with-md5-asm 使用md5匯編源
–with-sha1= 指向sha1庫目錄(數字簽名演算法,主要用於數字簽名)
–with-sha1-opt= 在編譯時為sha1庫設置附加參數
–with-sha1-asm 使用sha1匯編源
–with-zlib= 指向zlib庫目錄
–with-zlib-opt= 在編譯時為zlib設置附加參數
–with-zlib-asm= 為指定的CPU使用zlib匯編源進行優化,CPU類型為pentium, pentiumpro
–with-libatomic 為原子內存的更新操作的實現提供一個架構
–with-libatomic= 指向libatomic_ops安裝目錄
–with-openssl= 指向openssl安裝目錄
–with-openssl-opt 在編譯時為openssl設置附加參數
–with-debug 啟用debug日誌

⑤ 小內存編譯安裝mysql要加什麼參數

MySQL內存參數配置推薦:https://tools.percona.com/wizard
1.慢查詢日誌:
slow_launch_time=2 查詢大於某個時間的值(單位:s)
slow_query_log=on/off 開啟關閉慢查詢日誌
slow_query_log_file=/opt/data/host-slow.log 慢查詢日誌位置

2.連接數:
max_connections MySQL最大連接數
back_log 當連接數滿了後,設置一個值,允許多少個連接進入等待堆棧
max_connect_errors 賬號連接到伺服器允許的錯誤次數
connect_timeout 一個連接報文的最大時間(單位:s)
skip-name-resolve 加入my.cnf即可,MySQL在收到連接請求的時候,會根據請求包
中獲得的ip來反向追查請求者的主機名。然後再根據返回
的主機名又一次去獲取ip。如果兩次獲得的ip相同,那麼連接就成功建立了。
加了次參數,即可省去這個步驟
NOTES:
查詢當前連接數:show global status like 'connections';

3.key_buffer_size 索引緩存大小,是對MyISAM表性能影響最大的一個參數
32bit平台上,此值不要超過2GB,64bit平台不用做此限制,但也不要超過4GB
根據3點計算:
a.系統索引總大小
b.系統物理內存
c.系統當前keycache命中率
粗略計算公式:
Key_Size =key_number*(key_length+4)/0.67
Max_key_buffer_size
Threads_Usage = max_connections * (sort_buffer_size + join_buffer_size +
read_buffer_size+read_rnd_buffer_size+thread_stack)

key_cache_block_size ,是key_buffer緩存塊的單位長度,以位元組為單位,默認值為1024。
key_cache_division_limit 控制著緩存塊重用演算法。默認值為100,此值為key_buffer_size中暖鏈所佔的大小百分比(其中有暖鏈和熱鏈),100意味著全是暖鏈。(類似於Oracle Data Buffer Cache中的default、keep、recycle)
key_cache_age_threshold 如果key_buffer里的熱鏈里的某個緩存塊在這個變數所設定的時間里沒有被訪問過,MySQL伺服器就會把它調整到暖鏈里去。這個參數值越大,緩存塊在熱鏈里停留的時間就越長。
這個參數默認值為 300,最小值為100。
Myisam索引默認是緩存在原始key_buffer中的,我們可以手動創建新的key_buffer,如在my.cnf中加入參數new_cache.key_buffer_size=20M。指定將table1和table2的索引緩存到new_cache的key_buffer中:
cache index table1,table2 in new_cache;
(之前默認的key_buffer為default,現在手動創建的為new_cache)
手動將table1和table2的索引載入到key_buffer中:
load index into cache table1,table2;

系統中記錄的與Key Cache相關的性能狀態參數變數: global status
◆Key_blocks_not_flushed,已經更改但還未刷新到磁碟的DirtyCacheBlock;
◆Key_blocks_unused,目前未被使用的CacheBlock數目;
◆Key_blocks_used,已經使用了的CacheBlock數目;
◆Key_read_requests,CacheBlock被請求讀取的總次數;
◆Key_reads,在CacheBlock中找不到需要讀取的Key信息後到「.MYI」文件中(磁碟)讀取的次數;
◆Key_write_requests,CacheBlock被請求修改的總次數;
◆Key_writes,在CacheBlock中找不到需要修改的Key信息後到「.MYI」文件中讀入再修改的次數;
索引命中緩存率:
key_buffer_read_hits=(1-Key_reads/Key_read_requests)*100%
key_buffer_write_hits=(1-Key_writes/Key_write_requests)*100%
該命中率就代表了MyISAM類型表的索引的cache

4.臨時表 tmp_table_size (用於排序)
show global status like 『created_tmp%』;
| Variable_name | Value |
| Created_tmp_disk_tables | 21197 | #在磁碟上創建臨時表的次數
| Created_tmp_files | 58 | #在磁碟上創建臨時文件的次數
| Created_tmp_tables | 1771587 | #使用臨時表的總次數
TmpTable的狀況主要是用於監控MySQL使用臨時表的量是否過多,
是否有臨時表過大而不得不從內存中換出到磁碟文件上。
a.如果:
Created_tmp_disk_tables/Created_tmp_tables>10%,則需調大tmp_table_size
比較理想的配置是:
Created_tmp_disk_tables/Created_tmp_tables<=25%
b.如果:
Created_tmp_tables非常大 ,則可能是系統中排序操作過多,或者是表連接方式不是很優化。

相關參數:
tmp_table_size 內存中,臨時表區域總大小
max_heap_table_size 內存中,單個臨時表的最大值,超過的部分會放到硬碟上。

5.table cache相關優化 :
參數table_open_cache,將表的文件描述符打開,cache在內存中
global status:
open_tables 當前系統中打開的文件描述符的數量
opened_tables 系統打開過的文件描述符的數量

如果:
Opened_tables數量過大,說明配置中table_open_cache值可能太小

比較合適的值為:
Open_tables / Opened_tables * 100% >= 85%
Open_tables / table_open_cache * 100% <= 95%

6.進程的使用情況
在MySQL中,為了盡可能提高客戶端請求創建連接這個過程的性能,實現了一個ThreadCache池,
將空閑的連接線程存放在其中,而不是完成請求後就銷毀。這樣,當有新的連接請求的時候,
MySQL首先會檢查ThreadCache池中是否存在空閑連接線程,如果存在則取出來直接使用,
如果沒有空閑連接線程,才創建新的連接線程。

參數:thread_cache_size
thread cache 池中存放的最大連接數
調整參考:
在短連接的資料庫應用中,資料庫連接的創建和銷毀是非常頻繁的,
如果每次都需要讓MySQL新建和銷毀相應的連接線程,那麼這個資源消耗實際上是非常大的,因此
thread_cache_size的值應該設置的相對大一些,不應該小於應用系統對資料庫的實際並發請求數。

參數:thread_stack - 每個連接線程被創建的時候,MySQL給他分配的內存大小,
類似PGA中存放數據的內存部分(不包括排序的空間)

show status like 'connections';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections | 80 | #接受到的來自客戶端的總連接數,包括以前和現在的連接。
+---------------+-------+
show status like 'thread%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 0 | #當前系統中,緩存的連接數
| Threads_connected | 1 | #當前系統中正連接的線程數
| Threads_created | 77 | #創建過的匯流排程數
| Threads_running | 1 |
+-------------------+-------+
a.如果:
Threads_created 值過大,說明MySQL一直在創建線程,這是比較消耗資源的,應該適當增大
thread_cache_size的值
b.如果:
Threads_cached的值比參數thread_cache_size小太多,則可以適當減小thread_cache_size的值

ThreadCache命中率:
Threads_Cache_Hit=(Connections-Threads_created)/Connections*100%
一般來說,當系統穩定運行一段時間之後,我們的ThreadCache命中率應該保持在90%
左右甚至更高的比率才算正常。

7.查詢緩存(Query Cache) -- optional
將客戶端的SQL語句(僅限select語句)通過hash計算,放在hash鏈表中,同時將該SQL的結果集
放在內存中cache。該hash鏈表中,存放了結果集的內存地址以及所涉及到的所有Table等信息。
如果與該結果集相關的任何一個表的相關信息發生變化後(包擴:數據、索引、表結構等),
就會導致結果集失效,釋放與該結果集相關的所有資源,以便後面其他SQL能夠使用。
當客戶端有select SQL進入,先計算hash值,如果有相同的,就會直接將結果集返回。

Query Cache的負面影響:
a.使用了Query Cache後,每條select SQL都要進行hash計算,然後查找結果集。對於大量SQL
訪問,會消耗過多額外的CPU。
b.如果表變更比較頻繁,則會造成結果集失效率非常高。
c.結果集中保存的是整個結果,可能存在一條記錄被多次cache的情況,這樣會造成內存資源的
過度消耗。

Query Cache的正確使用:
a.根據表的變更情況來選擇是否使用Query Cache,可使用SQL Hint:SQL_NO_CACHE和SQL_CACHE
b.對於 變更比較少 或 數據基本處於靜態 的表,使用SQL_CACHE
c.對於結果集比較大的,使用Query Cache可能造成內存不足,或擠占內存。
可使用1.SQL_NO_CACHE 2.query_cache_limit控制Query Cache的最大結果集(系統默認1M)

mysql> show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| have_query_cache | YES | #是否支持Query Cache
| query_cache_limit | 1048576 | #單個結果集的最大值,默認1M
| query_cache_min_res_unit | 4096 | #每個結果集存放的最小內存,默認4K
| query_cache_size | 0 | #Query Cache總內存大小,必須是1024的整數倍
| query_cache_type | ON | #ON,OFF,DEMAND(包含SQL_CACHE的查詢中才開啟)
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
#query_cache_wlock_invalidate:
針對於MyISAM存儲引擎,設置當有WRITELOCK在某個Table上面的時候,
讀請求是要等待WRITE LOCK釋放資源之後再查詢還是允許直接從QueryCache中讀取結果,
默認為FALSE(可以直接從QueryCache中取得結果)

此為部分內容,附上原文出處:http://blog.itpub.net/26355921/viewspace-769393/

⑥ 限制linux伺服器的並發連接數的因素有哪些

編譯器就是c語言編譯成二進制的東西, 不同的編譯器是不同的, 比如16位系統和32位系統的編譯器就不同,因為16位的認為int是2位元組,32位的則認為是4個位元組。 另外 linux上的編譯器跟windows下的編譯器也不同,linux上的認為內核空間佔1G,而wind

⑦ 如何查看windows 連接數量

在Windows 2003系統上的遠程桌面實際上就是終端服務,雖然遠程桌面最初在Windows XP上就已經存在,但由於Windows XP的遠程桌面功能,只能提供一個用戶使用計算機,因此使用率並不高。而Windows 2003提供的遠程桌面功能則可供多用戶同時使用,在其上可以運行程序、保存文件和使用網路資源,在很多方面可以像使用終端一樣,並且在管理及配置方面比原來的終端服務更方便。要更好地發揮遠程桌面的作用就要對遠程桌面進行相應的配置。組策略編譯器(gpedit.msc)配置:
使用組策略編譯器配置用戶遠程連接數以及用戶會話數,
「開始」—>「運行」輸入gpedit.msc回車打開組策略編譯器->
「計算機配置」->「管理模板」->「windows組件」->「終端服務」,
右側滑鼠右鍵選擇「限制連接數」打開屬性,
選擇「設置」—>選擇「已啟用」, 「TS 允許的最大連接數」填寫你所需要的數量,
例如:20。確定完成最大連接數限制設置。
雙擊「會話」->選擇「為斷開的會話設置時間限制」右鍵選擇屬性-》「設置」->選擇「已啟用」-》「結束斷開連接會話」填寫合適的時間,比如五分鍾,即可。

⑧ 怎麼查看和修改 MySQL 的最大連接數

1、查看最大連接數的代碼:

show variables like '%max_connections%';

2、修改最大連接數的代碼:

set GLOBAL max_connections = 200;

在命令行中查看和修改 MySQL 的最大連接數,具體代碼如下:

>mysql -uuser -ppassword(命令行登錄MySQL)

mysql>show variables like 'max_connections';(查可以看當前的最大連接數)

msyql>set global max_connections=1000;(設置最大連接數為1000,可以再次查看是否設置成功)

mysql>exit

(8)編譯鏈接書擴展閱讀

MySQL的系統特性:

1、使用 C和 C++編寫,並使用了多種編譯器進行測試,保證了源代碼的可移植性。

2、支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統。

3、為多種編程語言提供了 API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。

4、支持多線程,充分利用 CPU 資源。

5、優化的 SQL查詢演算法,有效地提高查詢速度。

6、既能夠作為一個單獨的應用程序應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中。

7、提供多語言支持,常見的編碼如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作數據表名和數據列名。

8、提供 TCP/IP、ODBC 和 JDBC等多種資料庫連接途徑。

9、提供用於管理、檢查、優化資料庫操作的管理工具。

10、支持大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫。

11、支持多種存儲引擎。

12、MySQL 是開源的,所以你不需要支付額外的費用。

13、MySQL 使用標準的 SQL數據語言形式。

14、MySQL 對 PHP 有很好的支持,PHP是比較流行的 Web 開發語言。

15、MySQL是可以定製的,採用了 GPL協議,你可以修改源碼來開發自己的 MySQL 系統。

⑨ windows server 2003如何設置最大用戶連接數

在Windows 2003系統上的遠程桌面實際上就是終端服務,雖然遠程桌面最初在Windows XP上就已經存在,但由於Windows XP的遠程桌面功能,只能提供一個用戶使用計算機,因此使用率並不高。而Windows 2003提供的遠程桌面功能則可供多用戶同時使用,在其上可以運行程序、保存文件和使用網路資源,在很多方面可以像使用終端一樣,並且在管理及配置方面比原來的終端服務更方便。要更好地發揮遠程桌面的作用就要對遠程桌面進行相應的配置。

組策略編譯器(gpedit.msc)配置:

  1. 使用組策略編譯器配置用戶遠程連接數以及用戶會話數,

  2. 「開始」—>「運行」輸入gpedit.msc回車打開組策略編譯器->

  3. 「計算機配置」->「管理模板」->「windows組件」->「終端服務」,

  4. 右側滑鼠右鍵選擇「限制連接數」打開屬性,

  5. 選擇「設置」—>選擇「已啟用」,「TS允許的最大連接數」填寫你所需要的數量,

    例如:20。確定完成最大連接數限制設置。

  6. 雙擊「會話」->選擇「為斷開的會話設置時間限制」右鍵選擇屬性-》「設置」->選擇「已啟用」-》「結束斷開連接會話」填寫合適的時間,比如五分鍾,即可。

⑩ 怎樣解決orcl資料庫連接數一直在漲會問題

分析:
c.GetData(),編譯器首先在C中找GetData,沒有找到就像上層基類B中尋找,也沒有找到,再向A中尋找,發現A中有GetData()則調用。所以c.GetData()是調用A中的GetData。而GetData中又調用doGetData,而doGetData由於不是虛函數,所以也不會發生動態綁定,調用GetData時this是指向A的指針,所以就會調用A中的doGetData(從A中開始查找doGetData的名字)。
A::GetData()、B::GetData()、C::GetData()的作用相同,只是查找的起始范圍不同(分別從A、B、C中開始),但由於B、C中沒有GetData,最終都是調用的A中的。
c.doGetData(),會先在C中查找doGetData,沒有找到,向上一級B中查找,發現有這個函數就調用,所以調用的B中的doGetData。c.A::doGetData()、c.B::doGetData()分別指定從A、B中開始查找,因為A、B中都有doGetData,所以分別調用A、B中的doGetData(域操作符::指定名字查找開始的位置).

熱點內容
winxp無法訪問 發布:2025-05-19 15:19:48 瀏覽:945
文件預編譯 發布:2025-05-19 15:14:04 瀏覽:641
怎麼在伺服器上掛公網 發布:2025-05-19 15:14:02 瀏覽:270
濟南平安e通如何找回密碼 發布:2025-05-19 14:56:58 瀏覽:175
安卓手機如何找到iccid碼 發布:2025-05-19 14:46:51 瀏覽:226
編譯的內核為什麼那麼大 發布:2025-05-19 14:45:21 瀏覽:178
什麼控制壓縮 發布:2025-05-19 14:28:13 瀏覽:930
網路伺服器忙指什麼 發布:2025-05-19 14:28:10 瀏覽:188
伺服器有外網ip 發布:2025-05-19 14:02:02 瀏覽:833
電腦上c語言編程軟體 發布:2025-05-19 13:55:17 瀏覽:125