日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

記一次django內存異常排查及解決方法

瀏覽:214日期:2024-09-24 08:18:01

起因

Django 作為 Python著名的Web框架,相信很多人都在用,自己工作中也有項目項目在用,而在最近幾天的使用中發現,部署Django程序的服務器出現了內存問題,現象就是運行一段時間之后,內存占用非常高,最終會把服務器的內存耗盡,對于Python項目出現內存問題,自己之前處理過一次,所以并沒有第一次解決時的慌張,自己之前把解決方法也整理了:https://www.jb51.net/article/151604.htm

但是事情似乎并沒有我想的那么簡單,自己嘗試用之前的的方法tracemalloc庫進行問題的排查,但是問題來了實際的項目中有快一百多個接口,怎么排查?難道一個一個接口進行測試排查,但是時間又比較緊急,可能又來不及了。對比上次自己解決是因為上次的項目比較簡單,相對來說定位問題比較容易,那么這次怎么處理呢?

處理過程

一般Python項目其實是很少出現內存問題的,一般都是自己代碼寫的有問題導致的,而對于這次出現的問題,自己的排查思路(對于web 接口類型的項目):

先排查調用比較頻繁的接口 然后排查數據匯總接口(查詢比較復雜) 如果上述還沒有查出來,再排查剩余的接口

在這次的問題排查中,自己大致也是按照這個思路進行的,在對調用頻繁的接口進行排查時,并沒有發現內存的異常,而出現內存的問題則是在數據匯總的相關接口上。

其實這種接口對于初級開發可能是容易出問題的地方,首先這種接口查詢的數據相對其他接口會比較復雜,如果編碼基礎又不是特別好,可能就會在這些接口上出現bug.

而在這次的排查中,最終確定是在一個匯總數據的接口上,定位到問題處在了Django ORM 使用不當導致的。自己通過一個簡單代碼實例來說明:

class Student(models.Model): name = models.CharField(max_length=20) name2 = models.CharField(max_length=20) name3 = models.CharField(max_length=20) name4 = models.CharField(max_length=20) name5 = models.CharField(max_length=20) name6 = models.CharField(max_length=20) name7 = models.CharField(max_length=20) name8 = models.CharField(max_length=20) name9 = models.CharField(max_length=20) name10 = models.CharField(max_length=20) name11 = models.CharField(max_length=20) name12 = models.CharField(max_length=20) name13 = models.CharField(max_length=20) name14 = models.CharField(max_length=20) name15 = models.CharField(max_length=20) age = models.IntegerField(default=0)

正常情況,我們的表字段會比較多,這里就通過多個name來模擬,出現題的代碼就出在關于這個表的接口上:

def index(request): studets = Student.objects.filter(age__gt=20) if studets: pass return HttpResponse('test memory')

為了讓內存問題容易復現,我通過腳本向Student中插入了20000條數據,當然這里數據越多,問題越明顯

通過一個測試腳本并發請求這個接口,觀察內存情況,你會發現,內存會出現瞬間上漲的情況,并且如果你的數據越多,請求越多,你的內存可能會在一段時間居高不下,并且逐漸上漲。問題出在哪里了?

其實很簡單,問題出在了代碼中的if 判斷那里,我們通過filter 查詢返回的是QuerySet 類型的數據,而我們過濾之后的數據可能會存在非常多的時候,這個時候我們通過if 直接判斷,自己的理解這個地方會將整個QuerySet加載到內存中,從而出現內存占用過高的問題,而如果并且這個時候這個接口的響應速度也是非常會變慢,而這個QuerySet 中的數據越多,內存占用越明顯。

在Django的文檔中其實做了說明

exists()¶Returns True if the QuerySet contains any results, and False if not. This tries to perform the query in the simplest and fastest way possible, but it does execute nearly the same query as a normal QuerySet query.

exists() is useful for searches relating to both object membership in a QuerySet and to the existence of any objects in a QuerySet, particularly in the context of a large QuerySet.

The most efficient method of finding whether a model with a unique field (e.g. primary_key) is a member of a QuerySet is:

entry = Entry.objects.get(pk=123)if some_queryset.filter(pk=entry.pk).exists(): print('Entry contained in queryset')

Which will be faster than the following which requires evaluating and iterating through the entire queryset:

if entry in some_queryset: print('Entry contained in QuerySet')

And to find whether a queryset contains any items:

if some_queryset.exists(): print('There is at least one object in some_queryset')

Which will be faster than:

if some_queryset: print('There is at least one object in some_queryset')

… but not by a large degree (hence needing a large queryset for efficiency gains).

Additionally, if a some_queryset has not yet been evaluated, but you know that it will be at some point, then using some_queryset.exists() will do more overall work (one query for the existence check plus an extra one to later retrieve the results) than using bool(some_queryset), which retrieves the results and then checks if any were returned.

所以對于我們的代碼我們只需要把if 判斷地方改成if not studets.exists() 就可以解決問題。

這是一個很小的知識點,但是如果使用不對,可能就會造成非常嚴重的內存問題。

總結

除了單元測試,還需要做大數據量測試,這次的問題如果在測試的時候做過一定數據量的測試,可能很早就能及時發現

問題

對于基礎的庫的使用要更加熟悉

排查問題的思路要明確,不然可能會無從下手

延伸閱讀

https://docs.djangoproject.com/en/3.0/ref/models/querysets/ https://www.jb51.net/article/151604.htm

到此這篇關于django內存異常排查及解決方法的文章就介紹到這了,更多相關django內存異常排查內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产成人免费| 美女精品一区| 中文字幕在线高清| 玖玖精品视频| 亚洲a在线视频| 国产精品xx| 国产精品videosex极品| 中文精品在线| 亚洲高清不卡| 久久精品一本| 国产视频一区二区在线播放| 国产尤物精品| 欧美日韩精品一本二本三本| 精品一区二区三区视频在线播放| 日韩一区二区三区免费视频 | 一区二区视频欧美| 麻豆精品视频在线观看| 日产欧产美韩系列久久99| 99国产精品久久久久久久| 亚洲成人精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩av不卡在线观看| 亚洲一区日韩在线| 一区久久精品| 亚洲尤物av| 久久精品999| 国产一区二区三区国产精品| 久久精品理论片| 亚洲精品国产日韩| 在线一区二区三区视频| 三级欧美韩日大片在线看| 亚洲精品1区2区| 亚洲精品黄色| 国产精品地址| 国产传媒av在线| 婷婷精品进入| 日韩av成人高清| 精品亚洲a∨一区二区三区18| 日韩国产91| 国产资源在线观看入口av| 欧美一区二区三区高清视频| 久热精品在线| 麻豆免费精品视频| 中文一区一区三区高中清不卡免费| 亚洲精品.com| 日韩成人免费| 日韩在线黄色| 午夜av成人| 亚洲精品国产精品粉嫩| 国产一区二区三区精品在线观看 | 欧美偷窥清纯综合图区| 麻豆久久一区| 9色国产精品| 国产成人免费| 99国产精品| 国产 日韩 欧美 综合 一区| 丝袜亚洲精品中文字幕一区| 亚洲精品影视| 欧美.日韩.国产.一区.二区| 久久不见久久见国语| 一区在线观看| 中文字幕一区久| 日韩精品欧美精品| 久久黄色影视| 久久亚洲国产| 麻豆视频一区| 亚洲欧美久久精品| 91精品一区二区三区综合| 只有精品亚洲| 欧美综合另类| 日韩成人亚洲| 国产福利91精品一区二区| 免费在线观看不卡| 久久国产日韩| av日韩中文| 日韩欧美中文字幕在线视频| 久久影院一区| 日韩视频网站在线观看| 在线看片国产福利你懂的| 麻豆成人在线观看| 久久99视频| 精品视频91| 欧美在线精品一区| 天堂久久av| 欧美日韩视频免费看| 日本不卡视频在线观看| 日韩不卡在线观看日韩不卡视频 | 亚洲美女久久| 免费在线日韩av| 国产欧美一区二区色老头| 久久不见久久见中文字幕免费| 韩国一区二区三区视频| 伊人久久大香线蕉av不卡| 亚洲精品日韩久久| 新版的欧美在线视频| 美日韩精品视频| 精品欠久久久中文字幕加勒比| 日韩理论片av| 久久福利精品| 精品三级在线观看视频| 9色精品在线| 亚洲欧美在线综合| 日韩不卡在线观看日韩不卡视频| 精品国产18久久久久久二百| 国产精品毛片一区二区三区| 国产精品亚洲综合色区韩国| 亚洲国产日韩欧美在线| 精品中国亚洲| 青青国产精品| 国产毛片久久| 欧美午夜精彩| 国产精品精品国产一区二区| 日韩精彩视频在线观看| 裤袜国产欧美精品一区| 午夜久久av| 蜜桃视频免费观看一区| 久久人人88| 国产欧美一区二区三区精品酒店| 日韩极品在线观看| 免费观看在线色综合| 1024精品一区二区三区| 国产精品久久久久久久久久10秀 | 久久99久久人婷婷精品综合| 日韩在线电影| 日韩1区2区日韩1区2区| 日韩av一区二| 先锋亚洲精品| 亚洲毛片视频| 日本一区二区三区视频在线看| 亚洲欧美日韩专区| 亚洲婷婷丁香| 日韩av一级片| 免费一区二区三区在线视频| 五月国产精品| 国产精品嫩模av在线| 国产精品视频3p| 黄色精品视频| 久久精品官网| 女人天堂亚洲aⅴ在线观看| 午夜影院欧美| 亚洲九九精品| 亚洲精品影视| 久久影视三级福利片| 亚洲1234区| 色偷偷偷在线视频播放| 国产精品日本一区二区不卡视频| 欧美精品一二| 亚洲有吗中文字幕| 欧美日韩午夜电影网| 久久亚洲黄色| 婷婷激情综合| 三级久久三级久久久| 麻豆久久一区| 午夜久久黄色| 国产精品亚洲片在线播放| 日本美女一区| 午夜久久免费观看| 国产日韩一区二区三区在线| 精品免费av一区二区三区| 亚洲国产成人二区| 国产一区二区三区四区| 亚洲专区在线| 福利一区二区三区视频在线观看| 亚洲尤物在线| 成人av二区| 精品视频一区二区三区在线观看 | 久久久久国产精品一区三寸| 另类av一区二区| 波多视频一区| 日韩不卡一区二区| 免费观看不卡av| 国产成人免费| 欧美日韩夜夜| 中文字幕日本一区二区| 国内精品99| 国产va在线视频| 欧美精品福利| 99热精品在线观看| 最近高清中文在线字幕在线观看1| 日本中文字幕一区二区视频| 欧美日韩视频| 91精品国产乱码久久久久久久 | 激情黄产视频在线免费观看| 国产欧美一区二区精品久久久 | 午夜在线播放视频欧美| 视频在线不卡免费观看| 奇米777国产一区国产二区| 男女精品网站| 亚洲激情黄色| 午夜日本精品| 欧美日韩国产免费观看| 欧美午夜精品一区二区三区电影| 日韩精品不卡一区二区| 福利视频一区| 肉色欧美久久久久久久免费看| 福利精品在线| 国产91在线精品| 国产成人精品福利| 久久91导航| 在线精品小视频|