![在 jupyter notebook 中执行 Python 代码后 Ubuntu 冻结](https://linux22.com/image/1182538/%E5%9C%A8%20jupyter%20notebook%20%E4%B8%AD%E6%89%A7%E8%A1%8C%20Python%20%E4%BB%A3%E7%A0%81%E5%90%8E%20Ubuntu%20%E5%86%BB%E7%BB%93.png)
我尝试在 Windows 中执行此代码,它运行完美,但在 Ubuntu 中,只要我运行此代码,Ubuntu 就会冻结 3-4 分钟,然后结果出来,然后 Ubuntu 表现得滞后,直到我重新启动它。
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from xgboost import XGBClassifier
import xgboost as xgb
from sklearn.metrics import accuracy_score
dataset_len = 40000000
dlen = int(dataset_len/2)
X_11 = pd.Series(np.random.normal(2,2,dlen))
X_12 = pd.Series(np.random.normal(9,2,dlen))
X_1 = pd.concat([X_11, X_12]).reset_index(drop=True)
X_21 = pd.Series(np.random.normal(1,3,dlen))
X_22 = pd.Series(np.random.normal(7,3,dlen))
X_2 = pd.concat([X_21, X_22]).reset_index(drop=True)
X_31 = pd.Series(np.random.normal(3,1,dlen))
X_32 = pd.Series(np.random.normal(3,4,dlen))
X_3 = pd.concat([X_31, X_32]).reset_index(drop=True)
X_41 = pd.Series(np.random.normal(1,1,dlen))
X_42 = pd.Series(np.random.normal(5,2,dlen))
X_4 = pd.concat([X_41, X_42]).reset_index(drop=True)
Y = pd.Series(np.repeat([0,1],dlen))
df = pd.concat([X_1, X_2, X_3, X_4, Y], axis=1)
df.columns = ['X1', 'X2', 'X3', 'X_4', 'Y']
df.head()
答案1
free -m
运行代码后的结果显示,您已填满交换空间。这是坏的;此时您的系统实际上内存不足。它无法再将任何数据写入交换区,并且必须开始终止进程以释放内存。
Windows 具有动态交换大小,其中页面文件会根据需要扩展。Linux 的交换方法更静态一些,其中交换是固定的和预分配的。这可能会导致您看到的行为,因为 Ubuntu 在内存不足时开始终止进程。
你可以增加可用的交换空间以使情况变得更好一些,但最终您需要更多的 RAM 来运行内存密集型计算。