1.nginx常用命令
- 啟動nginx ./sbin/nginx
- 停止nginx ./sbin/nginx -s stop ./sbin/nginx -s quit
- 重載配置 ./sbin/nginx -s reload(平滑重啟) service nginx reload
- 重載指定配置文件 ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- 查看nginx版本 ./sbin/nginx -v
- 檢查配置文件是否正確 ./sbin/nginx -t
- 顯示幫助信息 ./sbin/nginx -h
2.nginx狀態(tài)碼
- 499:服務(wù)端處理時間過長,客戶端主動關(guān)閉了連接。
3.nginx是如何實現(xiàn)高并發(fā)的
一個主進程,多個工作進程,每個工作進程可以處理多個請求
每進來一個request玉掸,會有一個worker進程去處理。但不是全程的處理醒叁,處理到可能發(fā)生阻塞的地方司浪,比如向上游(后端)服務(wù)器轉(zhuǎn)發(fā)request,并等待請求返回辐益。那么断傲,這個處理的worker繼續(xù)處理其他請求,而一旦上游服務(wù)器返回了智政,就會觸發(fā)這個事件认罩,worker才會來接手,這個request才會接著往下走续捂。
由于web server的工作性質(zhì)決定了每個request的大部份生命都是在網(wǎng)絡(luò)傳輸中垦垂,實際上花費在server機器上的時間片不多。這是幾個進程就解決高并發(fā)的秘密所在牙瓢。即@skoo所說的webserver剛好屬于網(wǎng)絡(luò)io密集型應(yīng)用劫拗,不算是計算密集型。
4.nginx功能
- 作為http server(代替apache矾克,對PHP需要FastCGI處理器支持)
- 反向代理服務(wù)器
- 實現(xiàn)負載均衡
- 虛擬主機
- FastCGI:Nginx本身不支持PHP等語言页慷,但是它可以通過FastCGI來將請求扔給某些語言或框架處理
5.502錯誤可能原因
- (1).FastCGI進程是否已經(jīng)啟動
- (2).FastCGI worker進程數(shù)是否不夠
- (3).FastCGI執(zhí)行時間過長
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;- (4).FastCGI Buffer不夠
nginx和apache一樣,有前端緩沖限制,可以調(diào)整緩沖參數(shù)
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;- (5). Proxy Buffer不夠
如果你用了Proxying酒繁,調(diào)整
proxy_buffer_size 16k;
proxy_buffers 4 16k;- (6).php腳本執(zhí)行時間過長
將php-fpm.conf的<value name="request_terminate_timeout">0s</value>的0s改成一個時間
6.nignx配置
- worker_processes 8; 工作進程個數(shù)
- worker_connections 65535; 每個工作進程能并發(fā)處理(發(fā)起)的最大連接數(shù)(包含所有連接數(shù))
- error_log /data/logs/nginx/error.log; 錯誤日志打印地址
- access_log /data/logs/nginx/access.log 進入日志打印地址
- log_format main 'request" ''upstream_addr "$request_time"'; 進入日志格式
- fastcgi_connect_timeout=300; #連接到后端fastcgi超時時間
- fastcgi_send_timeout=300; #向fastcgi請求超時時間(這個指定值已經(jīng)完成兩次握手后向fastcgi傳送請求的超時時間)
- fastcgi_rend_timeout=300; #接收fastcgi應(yīng)答超時時間滓彰,同理也是2次握手后
- fastcgi_buffer_size=64k; #讀取fastcgi應(yīng)答第一部分需要多大緩沖區(qū),該值表示使用1個64kb的緩沖區(qū)讀取應(yīng)答第一部分(應(yīng)答頭),可以設(shè)置為fastcgi_buffers選項緩沖區(qū)大小
- fastcgi_buffers 4 64k;#指定本地需要多少和多大的緩沖區(qū)來緩沖fastcgi應(yīng)答請求州袒,假設(shè)一個php或java腳本所產(chǎn)生頁面大小為256kb,那么會為其分配4個64kb的緩沖來緩存
- fastcgi_cache TEST;#開啟fastcgi緩存并為其指定為TEST名稱揭绑,降低cpu負載,防止502錯誤發(fā)生
- listen 80; 監(jiān)聽端口
- server_name rrc.test.jiedaibao.com; 允許域名
- root /data/release/rrc/web; 項目根目錄
- index index.php index.html index.htm; 訪問根文件
7.nginx和apache的區(qū)別
- 輕量級,同樣起web 服務(wù)郎哭,比apache 占用更少的內(nèi)存及資源
- 抗并發(fā)他匪,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的夸研,在高并發(fā)下nginx 能保持低資源低消耗高性能
- 高度模塊化的設(shè)計邦蜜,編寫模塊相對簡單
- 最核心的區(qū)別在于apache是同步多進程模型,一個連接對應(yīng)一個進程陈惰;nginx是異步的畦徘,多個連接(萬級別)可以對應(yīng)一個進程
8.fastcgi與cgi的區(qū)別
cgi:
web服務(wù)器會根據(jù)請求的內(nèi)容毕籽,然后會fork一個新進程來運行外部c程序(或perl腳本...)抬闯, 這個進程會把處理完的數(shù)據(jù)返回給web服務(wù)器,最后web服務(wù)器把內(nèi)容發(fā)送給用戶关筒,剛才fork的進程也隨之退出溶握。 如果下次用戶還請求改動態(tài)腳本,那么web服務(wù)器又再次fork一個新進程蒸播,周而復始的進行睡榆。
fastcgi:
web服務(wù)器收到一個請求時,他不會重新fork一個進程(因為這個進程在web服務(wù)器啟動時就開啟了袍榆,而且不會退出)胀屿,web服務(wù)器直接把內(nèi)容傳遞給這個進程(進程間通信,但fastcgi使用了別的方式包雀,tcp方式通信)宿崭,這個進程收到請求后進行處理,把結(jié)果返回給web服務(wù)器才写,最后自己接著等待下一個請求的到來葡兑,而不是退出。
以上就是nginx常見的幾道面試題赞草,以下就是整理好的jvm讹堤、線程并發(fā)等面試題的答案。
面試題答案厨疙,獲取方式
請加QQ群:976203838
獲取以上面試題答案傳送門:https://shimo.im/docs/R6zZRIikthw8jifV