Oh Robert,
Migramos a un nuevo vps con 4 núcleos (Ryzen 9 5950x),
El uso de la CPU sigue siendo casi del 100%. Realmente no sé qué está mal.
¿Pensaste que te ibas a mudar a un servidor Scaleway de 8 núcleos?
¿Cuál es el ancho de banda que se afirma de este servidor? Me pregunto si un ancho de banda bajo podría causar que las conexiones lentas/desconexiones se conviertan en un cuello de botella?
Scaleway tiene VPS con anchos de banda de cientos de megabits por segundo, no 30.
30 me parece extremadamente bajo.
Esta es la especificación.
4096 MB de RAM DDR3 ECC
4 vCores de CPU (3.4+ GHz E3-1231 v3/1241 v3/1240 v5)
200 GB de almacenamiento HDD Raid 10
5 TB de ancho de banda a 1 Gb/s (velocidad limitada a 5 Mb/s después de usar la asignación)
1 IPv4, /64 IPv6
Protección DDoS TCP de 20 Gb/s, mejora disponible de 200 Gb/s
Seattle, Washington, EE. UU.
Panel de control Virtualizor
No administrado
Debido al retraso, finalmente elegimos este proveedor de servicios en la nube. Hicieron la optimización de la red para los visitantes de nuestro país.
Por cierto, la salida de htop es
El 100% de uso de CPU es anormal.
Todo está bien excepto la carga y el uso de la CPU.
¿Algo extraño en los registros de acceso?
Ahora parece que se está calmando.
Suponemos que restaurar desde una copia de seguridad causa un pico en el uso de la CPU.
De todos modos, ¡muchas gracias Robert!
¡Oh, sí, eso lo solucionaría!
Mmm, deberías apuntar a SSD
¡Buena observación, Benjamin!
Scaleway y otros tienen SSD NVMe. ¡Mucho mejor!
La CPU podría estar esperando en el disco.
oh lo siento, acabo de pegar una especificación incorrecta.
La especificación es
4096 MB de RAM DDR4 ECC
4 vCores de CPU (AMD Ryzen 5950X de 3,4 GHz)
100 GB de almacenamiento SSD NVMe en RAID
Ancho de banda de 5 TB a 10 Gb/s (velocidad limitada a 5 Mb/s después de usar la asignación)
1 IPv4, /64 IPv6
Protección DDoS TCP de 20 Gb/s, mejora disponible de 200 Gb/s
Seattle, Washington, EE. UU.
Panel de control Virtualizor
No administrado
Es NVMe. ![]()
Creo que es posible que los plugins que instalamos hayan aumentado la carga.
El plugin realizó un cambio en el modelo de usuario de tal manera que cuando vamos a la ruta de descubrimiento, siempre calculamos los puntos del modelo de usuario en el modelo de tema muchas veces
add_to_class(:user, :total_earned_points) do
self.user_points.sum(:reward_points)
end
add_to_class(:user, :available_points) do
self.total_earned_points - self.user_rewards.sum(:points)
end
add_to_class(:user, :rewards) do
DiscourseRewards::Reward.where(created_by_id: self.id)
end
add_to_serializer(:basic_user, :total_earned_points) do
user&.total_earned_points
end
add_to_serializer(:basic_user, :available_points) do
user&.available_points
end
add_to_serializer(:current_user, :total_earned_points) do
scope.user.total_earned_points
end
add_to_serializer(:current_user, :available_points) do
scope.user.available_points
end
add_to_serializer(:current_user, :user_rewards) do
scope.user.user_rewards
end
add_to_serializer(:current_user, :rewards) do
scope.user.rewards
end
¿Pensaste que habías dicho que habías eliminado todos los plugins y que se comportaba igual?
¿Tiene esto un índice?
¿Cuántas filas tiene la tabla user_rewards? Es interesante que no distinga por usuario… (pero supongo que de alguna manera debe ser a un nivel inferior a este).
Oh, me temo que no establece un índice.
El modelo se muestra a continuación.
module DiscourseRewards
class Reward < ActiveRecord::Base
self.table_name = 'discourse_rewards_rewards'
has_many :user_rewards
belongs_to :created_by, class_name: 'User'
default_scope { where(deleted_at: nil) }
end
end
module DiscourseRewards
class UserPoint < ActiveRecord::Base
self.table_name = 'discourse_rewards_user_points'
belongs_to :user
belongs_to :user_badge
belongs_to :user_points_category
def self.user_total_points(user)
UserPoint.where(user_id: user.id).sum(:reward_points)
end
end
end
module DiscourseRewards
class UserReward < ActiveRecord::Base
self.table_name = 'discourse_rewards_user_rewards'
belongs_to :user
belongs_to :reward
enum status: [:applied, :granted]
end
end
Desactivé todos los plugins en modo seguro. Sin embargo, como sabes, la base de datos no cambió. ![]()
Sospecho que es algo que debes discutir con el autor.
¿Parece que no está escalando para tu gran número de usuarios?
Es posible que necesites reconstruir sin el complemento. Sería una buena comparación y tal vez confirmaría si los problemas son causados por el complemento o no.
La presencia de tablas no importará si las consultas no se están ejecutando.
discourse_rewards_user_points | 233525 | 27 MB | 5152 kB | 32 MB
discourse_rewards_user_rewards | 61 | 16 kB | 16 kB | 32 kB
discourse_rewards_user_points_categories | 9 | 16 kB | 16 kB | 32 kB
discourse_rewards_rewards | 4 | 16 kB | 16 kB | 32 kB
La tabla discourse_rewards_user_points es enorme.
Elimínalo por completo (de la compilación, no es necesario destruir las tablas), mira qué sucede.
Gracias, lo intentaré ahora mismo.
Oh Robert, reconstruyo sin el plugin, el tiempo de respuesta de las páginas de la ruta de descubrimiento se reduce a menos de 200 ms desde los 2-3 s anteriores. ![]()
Ahí lo tienes. ¿Hablarías con el autor sobre la optimización o, si tienes las habilidades, harías una solicitud de extracción (PR)?
Le estoy pidiendo ayuda a nuestro amigo que está familiarizado con las bases de datos.
Pero él está trabajando en JAVA. Creo que llevará algún tiempo.




